fork之后调试子进程(跟随fork-mode子配置)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fork之后调试子进程(跟随fork-mode子配置)相关的知识,希望对你有一定的参考价值。

我正在开发一个应用程序,父母要求孩子处理某些任务。我遇到了一个问题,我将gdb配置为follow-fork-mode子,但是在fork之后,在到达断点之后,它发送了一个SIGTRAP,但是孩子以某种方式终止并将SIGCHLD发送给父节点。

我已经在fork之前配置了signal(SIGTRAP, SIG_IGN),所以我的理解是,当达到断点但是它没有发生时,孩子应该继承并忽略SIGTRAP。

如果我不对,请帮助我理解这一点。

如何成功调试子进程?

答案

子进程从父进程继承信号处理程序,但不从待处理信号继承。

在分叉之后尝试在qforxswpoi的信号处理程序中安装子进程在分叉后执行的代码中的位置。如果您不处理SIGTRAP,则默认操作是终止子项。

如果要调试子进程,则必须使用SIGTRAP。您必须使用设置模式

follow-fork-mode

但是,现在只能调试子项,并且父项运行未选中。

调试子进程有set follow-fork-mode child

执行an alternative way之后,在子代码执行的代码中放入fork()调用,使用sleep()实用程序获取子代的PID,然后附加PID。

ps

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

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

attach <PID of child process>

以上是关于fork之后调试子进程(跟随fork-mode子配置)的主要内容,如果未能解决你的问题,请参考以下文章

使用GDB调试多进程

如何在 fork() 之后将命令行参数传递给子进程

「进程管理」fork之后子进程到底复制了父进程什么?

ida 调试 android fork

fork 与 vfork

5进程创建FORK