使用gdbserver可以对目标设备上的程序进行远程调试。
gdbserver基本用法如下:
-
在要调试的目标设备启动gdbserver:
gdbserver :1234 /usr/bin/helloworld
此时gdbserver监听端口号1234,并等待客户端连接。
-
假设使用adb与目标设备进行连接,在我们主机上执行:
adb forward tcp:1234 tcp:1234
-
继续,在host端,比我们的PC上面,运行gdb:
然后设定 target remote :1234$ gdb (gdb) target remote :1234 Remote debugging using :1234
然后就可以对目标设备的程序进行debug了。
Remote 'g' packet reply is too long 问题
最初在使用gdbserver的时候,我遇到了如下问题:
(gdb) target remote :1234
Remote debugging using :1234
warning: Architecture rejected target-supplied description
Remote 'g' packet reply is too long: xxx...
这个问题的核心是:在手机上运行的gdbserver是配置为面向arm架构的(arm-eabi-linux),而在PC端运行的gdb是配置为面向X86_64架构的。
查看gdbserver的版本信息:
$ gdbserver --version
GNU gdbserver (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.
gdbserver is free software, covered by the GNU General Public License.
This gdbserver was configured as "arm-eabi-linux"
可以看到目标设备的gdbserver面向的架构是 arm-eabi-linux;
而我的PC上的gdb的架构是 "x86_64-unknown-linux-gnu"。
所以,出现了上述问题。
解决方法
保证gdbserver和gdb配置的架构是一致。在PC端安装针对arm架构配置的gdb工具。
gdb:The GNU Debugger for the ARM EABI (bare-metal) target
在archlinux上解决方式是安装 arm-none-eabi-gdb
pacman -S arm-none-eabi-gdb
然后使用arm-none-eabi-gdb连接gdbserver就OK了。
网友评论