说明:在使用GDB和gdbserver调试程序的时候连个版本一定要对应,不然会出现很多莫名奇怪的问题。
(1) download gdb source
ftp://ftp.gnu.org/gnu/gdb/
(2) compile
(2.1) compile gdb
./configure --target=arm-linux -v
make
在gcc4.0中,强制转换的值不能做左值.
如果您和我一样用的是gcc 4.0, 那只好把这几个地方修改了,也不知道是不是因为这个原因,有了本文最后面的那个问题。
(2.2) compile gdbserver(这个是要运行在arm上的,所以要进行交叉编译)
cd gdb/gdbserver
./configure --target=arm-linux --host=arm-linux
把config.h中的以下这一行用//注释掉
// #define HAVE_SYS_REG_H 1
make CC=arm-linux-gcc
libthread_db.so.1找不到的问题也比较麻烦,可以再把下面这一行注释掉
/* Define if you have the header file. */
//#define HAVE_THREAD_DB_H 1
(3)
run gdbsever on the ARM board
# gdbserver 1Array2.168.0.2:1254 hello
run gdb on the pc
[root@localhost helloWorld]# ./gdb
GNU gdb 6.3
Copyright 2004 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.&嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。调试时,应用程序在嵌入式目标系统上运行,而gdb调试在Host端。
一、编译安装gdb+gdbserver
首先下载gdb源码,我下载的是gdb-6.6.tar.gz。
$tar xvzf gdb-6.6.tar.gz
$mkdir mygdb
$cd mygdb
必须要在你想要安装的目录下执行下边的命令。
$../gdb-6.6/configure --target=arm-linux \ --prefix=/home/a/mygdb
参数说明:target是你的目标板,我的是arm-linux,prefix是你要安装的目标文件夹。
$make
$make install
然后建立gdbserver。
$mkdir mygdbserver
$cd mygdbserver
$chmod +x ../gdb-6.6/gdb/gdbserver/configure
$CC=arm-linux-gcc ../gdb-6.6/gdb/gdbserver/configure \
--host=arm-linux --prefix=/home/a/mygdbserver
$make
$make install
$arm-linux-strip gdbserver
去除调试信息。不去好像不行,我的就不行,去了就ok了。
复制到你的开发板上就可以了。
二、调试步骤
1、交叉编译,带参数-g加入调试信息。
假设要调试的程序为test.c。
#arm-linux-gcc -g test.c -o test
2、在Target Board开启gdbserver
#gdbserver :2345 test
gdbserver开始监听2345端口(你也可以设其他的值),然后启动test,你会看到“Process test created:pid=88”
3、回到Host端
#arm-linux-gdb test
最后一行显示:This GDB was configured as “--host=i686-pc-linux-gnu,--target=arm-linux”...
说明此gdb在X86的Host上运行,但是调试目标是ARM代码。
(gdb)target remote :2345
注意:你的端口号必须与gdbserver开启的端口号一致,这样才能进行通信。
建立链接后,就可以进行调试了。调试在Host端,跟gdb调试方法相同。注意的是要用“c”来执行命令,不能用“r”。因为程序已经在Target Board上面由gdbserver启动了。结果输出是在Target Board端,用超级终端查看。
阅读(8231) | 评论(0) | 转发(0) |