转载请注明:https://blog.csdn.net/fuqiangnxn/article/details/94080961
yum安装:
yum install gdb
yum install gdb-gdbserver
gdb 远程调试,可以让代码只在一台服务器上(宿主服务器), 然后把debug版本的程序放到目标机上进行远程调试,避免代码被复制出去。
gdb 远程调试,需要在远端目标服务器上部署 gdbserver 和要调试的程序,在宿主机上运行gdb。
默认 linux 没带 gdbserver,需要自己源码编译。
到 https://ftp.gnu.org/gnu/gdb/ 下载 gdb源码,redhat 6.x 系列都是 gdb-7.2a.tar.bz2
tar xfj gdb-7.2a.tar.bz2
cd gdb-7.2
cd gdb/gdbserver
./configure --prefix=$HOME/local/gdb
make
make install
只需要把 $HOME/local/gdb/bin/gdbserver 复制到目标服务器上即可。
查看帮助:
man -M ~/local/gdb/share/man gdbserver
目标机上运行:
$ ~/local/gdb/bin/gdbserver :9000 cyclone --slave --start
Process cyclone created; pid = 10020
Listening on port 9000
或者 gdbserver ip:port --attach pid
在宿主机上运行 gdb
$ gdb
(gdb) set debug remote 1
(gdb) set architecture i386:x86-64
(gdb) target remote 192.168.103.232:9000
Remote debugging using 192.168.103.232:9000
warning: Could not load vsyscall page because no executable was specified
try using the "file" command first.
0x0000003422800b00 in ?? ()
Created trace state variable $trace_timestamp for target's variable 1.
(gdb) symbol-file ~/work/dev/g8m/build/debug/Gliese/home/bin/cyclone
Reading symbols from /home/kongds/work/dev/g8m/build/debug/Gliese/home/bin/cyclone...done.
(gdb) b main
Breakpoint 1 at 0x4cf177: file /home/kongds/work/dev/g8m/src/trunk/product/layer/GlieseTool/cyclone/dev/src/ztcm/ztcmMain.c, line 102.
(gdb) continue
Continuing.
Breakpoint 1, main (aArgc=3, aArgv=0x7fffa4b1e048)
at /home/kongds/work/dev/g8m/src/trunk/product/layer/GlieseTool/cyclone/dev/src/ztcm/ztcmMain.c:102
102 stlInt32 sState = 0;
(gdb) next
注意:remote 模式下,不支持 start 命令。因此需要先下断点,然后执行 c命令. 接着就能一步一步debug 了。
///
set debug remote 1
set architecture i386:x86-64
target remote 192.168.103.232:9000
symbol-file /home/fq/gbase8m/gbase8m_debug/dest/Gliese/home/bin/cyclone
set follow-fork-mode child
catch exec