gdb远程调试release版本

对于线上release版本,由于已经剔除了debug信息,因此无法通过加载符号表来debug程序,但是如果保留了release版本对应的debug版本,那么可以通过debug版本对release版本进行调试。


以下假设release.exe是不带调试信息的release版本可执行文件,debug.exe是带调试信息的debug版本可执行文件。

如果不是很确定是否包含调试信息,可以通过readelf -S | grep debug可执行文件查看,如:

$ readelf -S debug.exe|grep debug
  [15] .debug_aranges    PROGBITS         0000000000000000  038613f5
  [16] .debug_info       PROGBITS         0000000000000000  038cb495
  [17] .debug_abbrev     PROGBITS         0000000000000000  3f4ff989
  [18] .debug_line       PROGBITS         0000000000000000  400b9f7f
  [19] .debug_str        PROGBITS         0000000000000000  42804480
  [20] .debug_loc        PROGBITS         0000000000000000  4324d336
  [21] .debug_ranges     PROGBITS         0000000000000000  493d1840


远程gdb调试有两种方式:

一种是用gdbserver将进程启动:如 gdbserver IP:PORT release.exe。

令外一种是对于远程机器上已有的进程进行调试:gdbserver --attach IP:PORT PID,其中PID可以通过ps命令查看得到release版本的进程号。

起始远程机器会显示待连接提示,如(进程号假设是5725):

# gdbserver --attach 192.168.1.9:6666 5725
Attached; pid = 5725
Listening on port 6666


在本地机器上通过gdb连接到上述远程待调试机器的gdbserver端口:

gdb debug.exe,然后执行命令target remote IP:PORT,IP:port为上述gdbserver中启动的IP:Port

...
(gdb) target remote IP:PORT


此时远程机器显示已经收到客户端的调试连接,如:

Remote debugging from host 192.168.1.20


本地机器连接到远程机器以后,远程的进程会被halt住,此时可以在本地机器执行cont来使远程进程继续执行。







猜你喜欢

转载自blog.csdn.net/sundongsdu/article/details/72903323