GDB 在arm开发板上的远程调试

2019-07-13 01:03发布

嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。调试时,应用程序在嵌入式目标系统上运行,而gdb调试在Host端。
一、编译安装gdb+gdbserver

这是我的编写的编译脚本:

#!/bin/sh
rundir=$(pwd)
tar xvf gdb-6.7.1.tar.bz2
mkdir gdbserv-build
mkdir gdb-arm-linux-build

#编译arm-linux-gdb
cd gdb-arm-linux-build
CC=cc ../gdb-6.7.1/configure --target=arm-linux --prefix=$rundir/gdb_install/gdb-arm-linux
make
make install

#交叉编译gdbserver

cd ../gdbserv-build/
CC=arm-linux-gcc ../gdb-6.7.1/gdb/gdbserver/configure --host=arm-linux --prefix=$rundir/gdb_install/gdbserv
make
make install
cd ..
rm gdbserv-build -rf
rm gdb-arm-linux-build -rf
rm gdb-6.7.1 -rf
二、调试使用:   1、交叉编译,带参数-g加入调试信息。 假设要调试的程序为test.c。 #> arm-linux-gcc -g test.c -o test   2、在Target Board开启gdbserver #> gdbserver  :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 :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)提取的!