美文网首页
使用gdbserver远程调试

使用gdbserver远程调试

作者: 诺远 | 来源:发表于2016-03-07 21:28 被阅读0次

    使用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了。

    相关文章

      网友评论

          本文标题:使用gdbserver远程调试

          本文链接:https://www.haomeiwen.com/subject/ocfzkttx.html