我正在开发一个应用程序,父级分叉子级来处理某些任务。我遇到一个问题,我已将 gdb 配置为 follow-fork-mode 子级,但在 fork 后,到达断点后,它发送 SIGTRAP 但子级以某种方式终止并向父级发送 SIGCHLD。
我已经配置了signal(SIGTRAP, SIG_IGN)
在fork之前,所以我的理解是,当到达断点但它没有发生时,孩子应该继承并忽略SIGTRAP。
如果我不正确,请帮助我理解这一点。
如何成功调试子进程?
子进程从父进程继承信号处理程序,但不继承挂起的信号。
分叉后尝试安装信号处理程序SIGTRAP
在代码中子进程在分叉后执行的位置。如果你不处理SIGTRAP
,默认操作是终止子进程。
如果要调试子进程,则必须使用follow-fork-mode
。
您必须使用设置模式
set follow-fork-mode child
但是,现在只能调试子级,而父级则不受检查地运行。
有另一种方式 https://sourceware.org/gdb/onlinedocs/gdb/Forks.html调试子进程。
After fork()
被执行后,放置一个sleep()
在子进程执行的代码中调用,使用以下命令获取子进程的PIDps
实用程序,然后附加 PID。
attach <PID of child process>
现在,您可以像调试任何其他进程一样调试子进程。
调试完成后,可以使用以下命令分离PID
detach
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)