查看: 232|回复: 0

[资料] T30 gdbserver使用方法

[复制链接]
发表于 2018-11-16 13:07:10 | 显示全部楼层 |阅读模式
gdbserver使用方法
gdbserver是嵌入式开发调试的主要工具,依赖开发板上的gdbserver程序以及交叉编译工具链中的mips-linux-gnu-gdb命令。gdbserver需要调试的PC和开发板网络相通。

本文仅介绍gdbserver的开启及连接方法,相关命令遵循标准gdbserver命令,详细内容请在互联网查询。

gdb以及gdbserver命令位置:

  1. gdb在toolchain文件夹下,位于bin/mips-linux-gnu-gdb
  2. gdbserver位于toolchain文件夹下:
  3. glibc: mips-linux-gnu/libc/usr/lib/bin/gdbserver
  4. uclibc: mips-linux-gnu/libc/uclibc/usr/lib/bin/gdbserver
复制代码

1. PC运行gdb
$ mips-linux-gnu-gdb [PC端应用程序路径]
例如:

  1. $ mips-linux-gnu-gdb sample-Encoder-h264
  2. GNU gdb (Ingenic 2015.02) 7.4.50.20120716-cvs
  3. Copyright (C) 2012 Free Software Foundation, Inc.
  4. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
  5. This is free software: you are free to change and redistribute it.
  6. There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
  7. and "show warranty" for details.
  8. This GDB was configured as "--host=i686-pc-linux-gnu --target=mips-linux-gnu".
  9. For bug reporting instructions, please see:
  10. <http://www.gnu.org/software/gdb/bugs/>...
  11. Reading symbols from sample-Encoder-h264...done.
复制代码

(gdb)
注:

如果出现(no debugging symbols found)的提示,可能是因为应用程序strip过了(PC端),删除了debug需要的段,无法进行gdb调试
开发板上程序是可以strip的,Symbol的读取在PC端gdb工具完成。这也就是gdbserver相对与local gdb以及core dump的优势——开发板端可以strip——因为前两者都需要在开发板端load symbol,因此应用程序会变得非常大,无法放在flash中
2. 设置动态库搜索路径
应用程序往往动态链接libc、ld等库,当运行于动态库中break时(比如memcpy)往往无法跟踪到当前pc所在位置。这是因为动态库的加载地址是不固定的。因此需要在PC端gdb上指定动态库加载路径。方法是:

  1. set solib-search-path /opt/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/lib/:/opt/mips-gcc472-glibc216-64bit/mips-linux-gnu/lib
复制代码

多个路径之间通过“:”来隔开。注:上述例子中仅指定了toolchain中glibc的libc系列库和libstdc++等主要外部库。

  1. glibc的动态库在toolchain文件夹下的相对目录为:mips-linux-gnu/libc/lib与mips-linux-gnu/lib
  2. uclibc的动态库在toolchain文件夹下的相对目录为:mips-linux-gnu/libc/uclibc/lib与mips-linux-gnu/lib/uclibc
复制代码

3. 开发板启动gdbserver
gdbserver [PC机IP:端口,与步骤2中端口需一致] [应用程序路径]
例如:

  1. gdbserver 192.168.1.100:1234 /tmp/sample-Encoder-h264
复制代码

4. 链接开发板
target remote [开发板IP:端口]
例如:

  1. target remote 192.168.1.101:1234
复制代码

5. gdbserver连通
开发板会出现如下信息:

  1. (gdb) target remote 192.168.1.101:1234
  2. Remote debugging using 192.168.1.101:1234
  3. Reading symbols from /opt/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/lib/ld.so.1...done.
  4. Loaded symbols for /opt/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/lib/ld.so.1
  5. 0x77fc7070 in __start () from /opt/mips-gcc472-glibc216-64bit/mips-linux-gnu/libc/lib/ld.so.1
复制代码

至此,即可在PC端运行gdb命令。注:与gdbserver与local gdb不同,启动程序的命令为“c”(continue)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

© 2008-2017 当前位置 易百纳技术社区论坛 返回 易百纳技术社区 ( 苏ICP备14036084 )   Powered by Discuz! X3.1
快速回复 返回顶部 返回列表