GDB远程调试

Posted by fishcried on September 11, 2014

1. 有点痛苦

GDB远程调试使用场景往往是嵌入式开发。目标机不能运行gdb(其他平台),或者没有足够的操作系统能力来支持完全功能的调试器。 而我使用远程调试却不是因为设备的处理能力不够,而是调试流程让我受够了。我需要将二进制文件在嵌入式设备上运行, 然后gdb attach上。 一边跟踪设备(通过串口),一边在开发机器对照代码。更糟糕的情况是设备与开发机器往往不在一起…

远程调试,合我的胃口

2. 远程调试原理

gdb可以与远程目标通过串口,网络(tcp/udp)来通信. 宿主机器需要一份包含了调试信息的目标副本,因为gdb需要符号表和调试信息。

3. 连接远程目标

gdb proname启动gdb后,可以通过target remote 命令来建立与远程目标的链接. target remote host:port or target remote tcp:host:port使用tcp协议进行链接

target remote 192.168.38.26:23456
  • ‘detach’
  • ‘disconnect’
  • ‘monitor cmd’

4. gdbserver

4.1 运行gdbserver

4.1.1 单独启动程序

gdbserver comm program [args ...]
gdbserver /dev/com1 emacs foo.txt
gdbserver host:2345 emacs foo.txt

4.1.2 attach

gdbserver --attach comm pid
gdbserver --attach comm 'pidof program'

4.2 向远程目标发送文件

  • remote put hostfile targetfile
  • remote get targetfile hostfile
  • remote delete targetfile

4.3 tui模式来配合

tui与远程调试配合才能显示出威力.如果不知道tui是什么,那么还是看看gdb的手册吧

变更记录

Why Who When
旧文档整理 fishcired 2014-07-13