gpt4 book ai didi

c - 子进程的 GDB 回溯

转载 作者:太空狗 更新时间:2023-10-29 17:10:12 24 4
gpt4 key购买 nike

我有一个 fork 子进程的应用程序。

子进程做了一些工作,并在中间某处给出了段错误。我使用 GDB 来调试它,我使用了:

set follow-fork-mode child

我还在子函数中设置了一个断点。但是 GDB 不会在我的断点处暂停。

父进程也处理段错误,所以我不得不按 ctrl-c 退出。然后,当我使用 backtrace 打印堆栈时,我得到的只是

No stack

为什么没有设置断点,为什么我没有得到堆栈?

最佳答案

Why is the breakpoint not being set

正在设置断点,但没有命中,因为...

and why didn't I get the stack?

...您显然在调试错误的进程。

通过set follow-fork-mode child,GDB 将跟随您创建的第一个 child 。也许您创造了不止一个?

调试此问题的一种方法是使用 signalsigaction 建立一个 SIGSEGV 处理程序。

在处理程序中,执行此操作:

void handler(int signo)
{
int i = 1;
fprintf(stderr, "pid=%d, got signal=%d\n", getpid(), signo);
while (i) { }
}

一旦您看到打印的消息,在另一个窗口中:

 gdb /proc/<pid>/exe <pid>
(gdb) where

关于c - 子进程的 GDB 回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9551779/

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