编译arm-linux-gdb和远程调试arm板程序

注:arm-linux-gdb的安装路径是/usr/local/arm-gdb
1、arm-linux-gdb的编译安装
下载gdb-6.8.tar.bz2至工作目录
gdb源码下载:http://ftp.gnu.org/gnu/gdb/
命令如下:
$tar -jxvf gdb-6.8.tar.bz2
$cd gdb-6.8
$./configure --target=arm-linux --enable-sim --prefix=/usr/local/arm-gdb
--prefix用于指定安装路径
$make
make时遇到以下错误:
configure: error: no termcap library found
make[1]: *** [configure-gdb] Error 1
make[1]: Leaving directory `/home/lining/gdb-6.8'
make: *** [all] Error 2
解决方法:主要是缺少termcap库文件,在终端里执行sudo apt-get install libncurses5-dev安装

$sudo make install
完成后可以在/usr/local/arm-gdb/bin下找到arm-linux-gdb文件
2、arm-linux-gdbserver的编译安装
进入./gdb/gdbserver
命令如下:
$cd gdb/gdbserver./configure --target=arm-linux --host=arm-linux 
$make CC=arm-linux-gcc
(CC=arm-linux-gcc用于指定arm-linux编译器)
编译时出现PATH_MAX undeclared错误的解决方法:
在hostio.c文件中增加
#include <linux/limits.h>
原因是宏PATH_MAX在<limits.h>中没有定义,而是定义在<linux/limits.h>中
(红色表示我在编译时没有碰到这个错误,此错误是网友整理的,留在这里以供以后参考)

编译成功后在当前目录下会生成gdbserver文件,拷贝至开发板上(可放入开发板/usr/bin/目录下,这样在任何目录下均可执行gdbserver命令)


调试方法:

1、交叉编译,带参数-g加入调试信息。
假设要调试的程序为test.c。
#> arm-linux-gcc -g test.c -o test

2、在Target Board开启gdbserver
#> gdbserver  <host-ip>:port test

#> gdbserver 192.168.0.1:2234 test

gdbserver开始监听2345端口(你也可以设其他的值),然后启动test,你会看到“Process test created:pid=88”
3、回到Host端
#> arm-linux-gdb /mnt/nfs/test
最后一行显示:This GDB was configured as “--host=i686-pc-linux-gnu,--target=arm-linux”...
说明此gdb在X86的Host上运行,但是调试目标是ARM代码。
(gdb)target remote <target-board-ip>:port

gdb> target remote 192.168.0.12:2234

注意:你的端口号必须与gdbserver开启的端口号一致,这样才能进行通信。
建立链接后,就可以进行调试了。调试在Host端,跟gdb调试方法相同。注意的是要用“c”来执行命令,不能用“r”。因为程序已经在Target Board上面由gdbserver启动了。结果输出是在Target Board端,用超级终端查看。

 
 
注意: 你可能会遇到主机和arm板都连同了但是却没有调试信息!
你可以在pc机端
gdb> symbol-file ../test (调用调试信息)
或者是:
#> ./arm-linux-gdb ../test 
 
备注:就是要在开发板和pc主机上都要有运行的文件,调试信息是从本地的文件(../test)提取的!


另外有的程序需要根据程序崩溃产生的core文件来调试,所以要先产生core文件,方法:ulimit -a 先查询一下,然后ulimit -c 大小,这里我设置为unlimited。即ulimit -c unlimited 。

这样就可以在执行文件对应目录下产生core文件了。

你可能感兴趣的:(编译arm-linux-gdb和远程调试arm板程序)