我想调试作为服务在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`.
那时,您可以设置喙点,并根据需要使用
continue
或next
或step
。关于c++ - 使用gdb调试linux守护程序的初始启动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48452183/