gdb下载地址:http://ftp.gnu.org/gnu/gdb/
交叉编译工具:arm-linux-gcc-3.4.1
一、编译gdb,gdbserver
第一步:编译gdb
1、解压
tar xjf gdb-7.4.tar.bz2
cd gdb-7.4/
2、配置:
./configure --target=arm-linux
3、编译
make
这一步出现问题
/root/tools/gdb-6.6/bfd/elf32-arm.c: In function ‘find_thumb_glue’:
/root/tools/gdb-6.6/bfd/elf32-arm.c:2452: error: ignoring return value of ‘asprintf’, declared with attribute warn_unused_result
/root/tools/gdb-6.6/bfd/elf32-arm.c: In function ‘find_arm_glue’:
/root/tools/gdb-6.6/bfd/elf32-arm.c:2485: error: ignoring return value of ‘asprintf’, declared with attribute warn_unused_result
由于返回值没有被接收导致编译终端,编译规则太严了,可修改编译规则
“-Werror” will make all warnings into errors. That means you cannot get you program compiled with even warnings.
修改bfd/Makefile:185:WARN_CFLAGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror
改为:WARN_CFLAGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes
再次make,出现类似的错误,在修改
4、安装到$PWD/tmp
mkdir tmp
make install prefix=$PWD/tmp
5、把arm-linux-gdb复制到/bin目录
sudo cp arm-linux-gdb /bin/
sudo chmod +x /bin/arm-linux-gdb
第二步:编译gdbserver
cd gdb/gdbserver/
./configure –host=arm-linux
make
cp gdbserver /work/nfs_root/first_fs/bin
第三步:在PC编译要调试的应用,编译时加上-g选项
arm-linux-gcc -g -o dma_test dma_test.c
第四步:调试
在ARM板上
gdbserver 10.66.114.17:1234 ./dma_test dma在PC上
/bin/arm-linux-gdb ./dma_test dma
输入:target remote 10.66.114.17:1234
然后: 使用gdb命令来控制程序另一种方法:
让程序在开发板上直接运行,当它发生错误时,令它产生core dump文件
然后使用gdb根据core dump文件找到发生错误的地方
在ARM板上:- ulimit -c unlimited
- 执行应用程序 : 程序出错时会在当前目录下生成名为core的文件
在PC上:
/bin/arm-linux-gdb ./test_debug ./corebacktrace(bt)