1.准备工具
gdbserver.static 设备端的gdbserver(静态编译版本)
arm-linux-objcopy 主机端工具
arm-linux-objdump 主机端工具
arm-linux-gdb 主机端调试工具
gdbserver.static要复制到设备上,或者在设备端的mount目录中。
2.编译程序调试版本
修改编译标志,加上-g参数
3.生成调试信息文件
arm-linux-objcopy -only-keep-debug xxx xxx.debug
其中xxx表示调试对象(so文件或可执行文件,以下同)
4.去掉调试对象的debug信息
这样可以减小对象尺寸
arm-linux-objcopy –strip-debug xxx
5.在调试对象加入debug段
arm-linux-objcopy –add-gnu-debuglink=xxx.debug
6.如果要调试.so,记录调试信息偏移量
arm-linux-objdump -h|grep text
记录偏移量(第3个字段)
6.在设备上运行调试对象
7.用ps命令取得调试对象进程pid
8.用cat /proc/pid/maps获得调试对象的内存映射
如果调试可执行程序如qpe,此步骤可省略
如果调试.so, 记录下.so的起始地址
9.在设备端运行gdbserver
gdbserver.static 192.168.0.3:xxxx –attach xxx
| | |
主机IP 调试端口 pid
10.在主机端运行arm-linux-gdb
11.在gdb提示符下,如果调试可执行程序
输入symbol-file xxx.debug
如果调试.so
输入add-sybmbol-file xxx 内存映射地址+偏移量
12.用directory命令设置源代码目录
13. target remote 设备IP:调试端口
如果一切正确,将中断调试对象的运行,出现断点提示
这样就可以运行gdb的各项命令调试程序了
参考资料:
http://sources.redhat.com/gdb/current/onlinedocs/gdb_toc.html 非常详尽的gdb参考手册