(配置后续叉模式子)后叉调试子进程(Debugging child process after fo

2019-07-20 16:51发布

我开发一个应用程序,它的父进程派生了子来处理某些任务。 我在那里我已经配置了GDB遵循叉型孩子,但叉之后,达到一个断点后,它会发送SIGTRAP但孩子莫名其妙地终止和发送SIGCHLD给父的问题。

我已经配置signal(SIGTRAP, SIG_IGN)叉之前,所以我的理解是,孩子要继承和到达断点时忽略SIGTRAP但它没有发生。

请帮我理解这一点,如果我不正确。

我怎样才能成功地调试子进程?

Answer 1:

子进程继承父信号处理程序,而不是等待状态信号。

分叉尝试安装了信号处理后SIGTRAP在代码中分叉后的子进程在执行的地方。 如果你不处理SIGTRAP ,默认的操作是,孩子被终止。

如果你想调试子进程,则必须使用follow-fork-mode 。 您必须使用设置模式

set follow-fork-mode child

然而,现在只有孩子可以调试,和父运行选中。

还有另一种方法调试子进程。

之后fork()执行,把sleep()在子女执行的代码调用,使用得到孩子的PID ps工具,然后装上PID。

attach <PID of child process>

现在,您可以调试子进程,像任何其他过程。

调试完毕后,您可以使用分离的PID

detach


文章来源: Debugging child process after fork (follow-fork-mode child configured)
标签: c gdb signals fork