[英]Debug using gdb the initial startup of a linux daemon
我想调试一个守护进程的初始启动,该守护进程是作为linux下的服务启动的(centos 7)。
我的服务启动为:“service mydaemon start”
我知道将gdb附加到正在运行的进程,但不幸的是,这种技术太慢了,mydaemon的初始执行很重要。
mydaemon是用C ++编写的,可以使用完整的调试信息。
不幸的是,这种技术太慢了
这个问题有两种通用的解决方案。
这里描述了第一个:你使目标可执行文件等待 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`.
此时,您可以设置beakpoints,并根据需要使用continue
或next
或step
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.