gpt4 book ai didi

c - fork 后调试子进程(follow-fork-mode child 配置)

转载 作者:太空狗 更新时间:2023-10-29 16:22:56 26 4
gpt4 key购买 nike

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

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

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

如何成功调试子进程?

最佳答案

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

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

如果要调试子进程,必须使用follow-fork-mode。您必须使用

设置模式
set follow-fork-mode child

但是,现在只能调试child,而parent运行不受检查。

an alternative way调试子进程。

fork()执行后,在child执行的代码中调用sleep(),使用ps获取child的PID 实用程序,然后附上 PID。

attach <PID of child process>

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

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

detach

关于c - fork 后调试子进程(follow-fork-mode child 配置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15126925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com