嵌入式调试方法——用GDB Server进行远程

本文详细介绍了如何使用GDB Server进行远程嵌入式调试的方法,包括在目标板上编译和安装GDB、GDB Server及目标程序,以及在主机上通过TCP连接进行调试。通过实例演示了如何准备调试环境并利用GDB进行单步执行、设置断点等功能。

嵌入式调试方法

——

GDB Server

进行远程

 

关键字:

  

GDB Server

进行远程调试

 

某些时候由于模拟环境的限制,调试必须要在目标板上进行。由于

嵌入式系统

资源比较有限,一般

不能在目标板上直接构建

GDB

的调试环境,

这时我们通常采用

gdb+gdbserver

的远程调试方法:

gdbserver

在目标板中运行,而

gdb

则在主机上运行。

 

构建

gdb+gdbserver

调试环境的在于,

要将

gdb

gdbserver

都编译成适用于目标板的版本。

比如我

们用

x86

的主机和

ARM

目标板,平时在主机上直接调试的时候都使用用于

x86

调试的

gdb

,但这个

gdb

不能用于远程调试中,

需要针对

ARM

平台进行配置之后重新编译才行;

gdbserver

要运行在目标板上,

则需要用

arm-linux-gcc

编译才行。

 

 

远程调试

 

tcp 

调试方法

 

 

1.

 

代码服务器上的编译安装操作

 

 

我们可以从

http://ftp.gnu.org/gnu/gdb/

 

或其他站点下载

GDB

的源代码来进行编译。得到源代

码包

gdb-6.6.tar

.gz

之后,将

target

配置成

arm-

linux

,然后进行编译:

 

$ tar xzvf gdb-6.6.tar.gz 

$ cd gdb-6.6 

$ ./configure --target=arm-linux 

$ make 

$ make install

 

注意这时我们编译的是用于主机上的

gdb

程序,

因此仍然用

x86

版本的

gcc

编译,

而不是用

arm-gcc

下来

们要

编译

gdbserver

行在

标板

的,

arm-gcc

译了

CC=<your_arm-linux-gcc_path>

来指定

arm-linux-gcc

编译器:

 

$ cd gdb/gdbserver/ 

$ ./configure --target=arm-linux --host=arm-linux 

$ make CC=/opt/toolchain/bin/arm-linux-gcc 

$ make install 

 

下载到目标板

 

 

得到

gdb

gdbserver

之后,将

gdbserver

下载到目标板上就可以进行远程调试了。我们还是以前面

用过的

overflow

程序为例来说明,注意

overflow

程序也需要重新用

arm-linux-gcc

编译得到

ARM

版本的

overflow

程序,并下载到目标板上。

 

完成这些之后可以用

file

命令来检查所准备

gdb

gdbserver

overflow

程序的格式是否正确:

 

$ file arm-linux-gdb 

arm-linux-gdb: 

ELF 

32-bit 

LSB 

executable, 

Intel 

80386

version 

(SYSV), 

for 

GNU/Linux 

2.4.17, dynamically linked (uses shared libs), not stripped 

$ file overflow 

overflow: 

ELF 

32-bit 

LSB 

executable, 

ARM

version 

(SYSV), 

for 

GNU/Linux 

2.4.17, 

dynamically linked (uses shared libs), not stripped 

$ file gdbserver 

gdbserver: 

ELF 

32-bit 

LSB 

executable, 

ARM

version 

(SYSV), 

for 

GNU/Linux 

2.4.17, 

dynamically linked (uses shared libs), not stripped

 

2.

 

联机调试

 

 

注意确保在目标板上运行的

gdbserver

overflow

程序被编译成

ARM

 ELF

格式,而

gdb

由于是运

行在主机上,还是

x86

格式的。

 

gdb

gdbserver

之间可以通过

TCP(

格式为

host:port)

UDP(

格式为

udp: host:port)

或者串口(比如

/dev/ttyb

)来通信,我们以

TCP

方式为例来说明。

 

 

目标板:就是我们用的开发板

 

主机:为我们的开发代码用的服务器

 

 

假设目标板的

IP

192.168.2.1

主机为

192.168.2.100

使用端口

5678

来调试,

首先在目标板上运

gdbserver

 

/*

操作为,开发板子上面的操作

*/ 

# gdbserver 

192.168.2.100

:5678 ./overflow

(注明格式:为

 

gdbserver ip

地址:端口

 

调试

的程序)

 

Process ./overflow created; pid = 618 

Listening on port 5678

 

然后在主机上运行

gdb

,并运行

gdb

命令

“target remote 192.168.2.1:5678”

 

 

 

/*

我们代码服务器上的操作

*/ 

$ arm-linux-gdb ./overflow 

(开发代码用的服务器)

 

GNU gdb 6.6 

Copyright (C) 2006 Free Software Foundation, Inc. 

GDB is free software, covered by the GNU General Public License, and you are 

welcome to change it and/or distribute copies of it under certain conditions. 

Type "show copying" to see the conditions. 

There is absolutely no warranty for GDB. Type "show warranty" for details. 

This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux"... 

(gdb) 

target remote 192.168.2.1:5678

 

Remote debugging using 192.168.2.1:5678 

0x28556080 in ??() 

(gdb)

 

接下来你就可以象前面所介绍的那样使用

gdb

命令了,比如设置断点及查看变量单步执行等。

 

 

3.

 

服务器上的调试动作(和

gdb 

调试相同了)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值