使用gdbserver远程调试

0.314字数 371阅读 10219

使用gdbserver可以对目标设备上的程序进行远程调试。
gdbserver基本用法如下:

Paste_Image.png
  1. 在要调试的目标设备启动gdbserver:

     gdbserver :1234 /usr/bin/helloworld
    

此时gdbserver监听端口号1234,并等待客户端连接。

  1. 假设使用adb与目标设备进行连接,在我们主机上执行:

     adb forward tcp:1234 tcp:1234
    
  2. 继续,在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了。

推荐阅读更多精彩内容