gdb server 远程调试

某些时候由于模拟环境的限制,调试必须要在目标板上进行。由于嵌入式系统资源比较有限,一般不能在目标板上直接构建GDB的调试环境,这时我们通常采用gdb+gdbserver的远程调试方法:gdbserver在目标板中运行,而gdb则在主机上运行。

构建gdb+gdbserver调试环境的在于,要将gdbgdbserver都编译成适用于目标板的版本。比如我们用x86的主机和ARM目标板,平时在主机上直接调试的时候都使用用于x86调试的gdb,但这个gdb不能用于远程调试中,需要针对ARM平台进行配置之后重新编译才行;而gdbserver要运行在目标板上,则需要用arm-linux-gcc编译才行。

我们可以从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=来指定arm-linux-gcc编译器:

$cd gdb/gdbserver/

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

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

$make install

得到gdbgdbserver之后,将gdbserver下载到目标板上就可以进行远程调试了。我们还是以前面用过的overflow程序为例来说明,注意overflow程序也需要重新用arm-linux-gcc编译得到ARM版本的overflow程序,并下载到目标板上。

完成这些之后可以用file命令来检查所准备gdbgdbserveroverflow程序的格式是否正确:

$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), notstripped

$file overflow

overflow:ELF 32-bit LSB executable, ARM, version 1 (SYSV), forGNU/Linux 2.4.17, dynamically linked (uses shared libs), notstripped

$file gdbserver

gdbserver:ELF 32-bit LSB executable, ARM, version 1 (SYSV), forGNU/Linux 2.4.17, dynamically linked (uses shared libs), notstripped

注意确保在目标板上运行的gdbserveroverflow程序被编译成ARMELF格式,而gdb由于是运行在主机上,还是x86格式的。

gdbgdbserver之间可以通过TCP(格式为host:port)UDP(格式为udp:host:port)或者串口(比如/dev/ttyb)来通信,我们以TCP方式为例来说明。

假设目标板的IP192.168.2.1,主机为192.168.2.100,使用端口5678来调试,首先在目标板上运行gdbserver

#gdbserver 192.168.16.1:5678 ./overflow

Process./overflow created; pid = 618

Listeningon port 5678

然后在主机上运行gdb,并运行gdb命令“targetremote 192.168.2.1:5678”

$arm-linux-gdb ./overflow

GNUgdb 6.6

Copyright(C) 2006 Free Software Foundation, Inc.

GDBis free software, covered by the GNU General Public License, andyou are

welcometo change it and/or distribute copies of it under certainconditions.

Type"show copying" to see the conditions.

Thereis absolutely no warranty for GDB. Type "show warranty"for details.

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

(gdb)target remote 192.168.2.1:5678

Remotedebugging using 192.168.2.1:5678

0x28556080in ??()

(gdb)

接下来你就可以象前面所介绍的那样使用gdb命令了,比如设置断点及查看变量单步执行等。

你可能感兴趣的:(arm-linux相关,arm板调试工具)