我想调试作为服务在linux(centos 7)下启动的守护程序的最初启动。

我的服务启动为:“服务mydaemon启动”

我知道将gdb附加到正在运行的进程中,但是,不幸的是,该技术太慢,mydaemon的初始执行很重要。

mydaemon用C++编写,并且提供了完整的调试信息。

最佳答案



有两种解决方案。

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

第二种是将守护进程“包装”在gdbserver中(作为根用户):

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

关于c++ - 使用gdb调试linux守护程序的初始启动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48452183/

10-15 18:04