使用gdb调试linux守护进程的初始启动

时间:2018-01-25 21:28:05

标签: c++ linux debugging service gdb

我想调试一个在linux下作为服务启动的守护进程的初始启动(centos 7)。

我的服务开始时间为:" service mydaemon start"

我知道将gdb附加到正在运行的进程,但不幸的是,这种技术太慢了,mydaemon的初始执行非常重要。

mydaemon是用C ++编写的,可以使用完整的调试信息。

1 个答案:

答案 0 :(得分:1)

  

不幸的是,这种技术太慢了

这个问题有两种通用解决方案。

第一个描述here:你使目标可执行文件等待以便GDB附加(这需要构建一个特殊版本的守护进程)。

第二种是将你的守护进程“包装”在gdbserver中(以root身份):

mv mydaemon mydaemon.exe
echo > mydaemon <<EOF
#!/bin/sh
exec gdbserver :1234 /path/to/mydaemon.exe "$@"
EOF
chmod +x mydaemon

现在执行service mydaemon start,您的进程将被gdbserver停止,并等待来自GDB的连接。

gdb /path/to/mydaemon.exe
(gdb) target remote :1234
# You should now be looking at the mydaemon process stopped in `_start`.

此时您可以设置喙点,并根据需要使用continuenextstep