基于x86的板子
下载gdb源码
http://ftp.gnu.org/gnu/gdb/
一般linux发行版中都有一个可以运行的gdb,但开发人员不能直接使用该发行版中的gdb来做远程调试
远程调试中,目标机需要包含两个程序 gdbserver和需要调试的程序(例如gdbtest)
#tar -zxvf gdb-7.9.tar.gz
编译GDB Server
#cd gdb-7.9
#./configure --target=arm-linux --prefix=/usr/local/arm-gdb
#make
#cd ./gdb/gdbserver
#./configure
#make
因为目标机是x86架构的可以使用默认配置文件,无需交叉编译(至少我实验时不需要。。总有特殊情况。。)
编译调试程序
若目标机包含的库全面则
gcc -g gdbtest.c -o gdbtest
若库不全,可以静态编译程序
gcc -g gdbtest.c -static -o gdbtest
("ldd 程序名"可以查看程序所要用到的库文件)
把编译好的gdbserver和gdbtest通过ftp,nfs等方法下载到目标机的嵌入式linux系统
并且放在/home目录下(因为pc宿主机的gdbtest在/home目录下)
假设目标机ip为192.168.0.16
宿主机ip为192.168.0.4
先在目标机/home下运行命令:./gdbserver 192.168.0.4:1234 gdbtest
注:1234是用于通信端口号,一般不要用1024一下的端口,因为这些端口有特殊作用
gdbtest是需要调试的程序
当出现
Process
wpa_cli created; pid = 730
Listening
on port 1234
表明目标机已经准备好正在监听1234端口
再在宿主机下的/home目录下运行命令gdb gdbtest
进入gdb调试命令行
再输入命令target remote 192.168.0.16:1234回车
这时目标机会出现
Remote
debugging from host 192.168.100.1
表示gdbserver成功运行并且建立连接关系,等待客户端的调试信息
之后就可以在宿主机上和本地gdb调试一样调试程序了。
注意事项:目标机运行gdbserver前要确保网络通常。
若联接成功后调试中出现某些gdb调试命令无法使用(例如list命令),可能是目标机包含的运行库不全
可在宿主机运行ldd+程序名
查看程序运行所需的库。