嵌入式linux远程gdb调试(基于x86架构)

2019-07-13 02:48发布

基于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+程序名 查看程序运行所需的库。