嵌入式调试方法
——
用
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
1
(SYSV),
for
GNU/Linux
2.4.17, dynamically linked (uses shared libs), not stripped
$ file overflow
overflow:
ELF
32-bit
LSB
executable,
ARM
,
version
1
(SYSV),
for
GNU/Linux
2.4.17,
dynamically linked (uses shared libs), not stripped
$ file gdbserver
gdbserver:
ELF
32-bit
LSB
executable,
ARM
,
version
1
(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
调试相同了)