我想调试一个在linux下作为服务启动的守护进程的初始启动(centos 7)。
我的服务开始时间为:" service mydaemon start"
我知道将gdb附加到正在运行的进程,但不幸的是,这种技术太慢了,mydaemon的初始执行非常重要。
mydaemon是用C ++编写的,可以使用完整的调试信息。
答案 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`.
此时您可以设置喙点,并根据需要使用continue
或next
或step
。