GDB回溯了子进程

bro*_*oun 7 c gdb fork debug-backtrace

我有一个应用程序,它会分叉子进程.

子进程做了一些工作,在中间某处它给出了Segmentation错误.我使用GDB来调试这个,我用过:

set follow-fork-mode child
Run Code Online (Sandbox Code Playgroud)

我还为孩子中的一个函数设置了一个断点.但GDB并没有在我的断点暂停.

父进程也处理seg-fault,所以我不得不ctrl-c退出.然后,当我backtrace用来打印堆栈时,我得到的就是

没有堆栈

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

Emp*_*ian 8

为什么没有设置断点

断点设定,但它没有被击中,因为......

为什么我没有得到堆栈?

...你显然是在调试错误的过程.

有了set follow-fork-mode child,GDB将跟随您创建的第一个孩子.也许你创造了不止一个?

调试此方法的一种方法是SIGSEGV使用signal或建立处理程序sigaction.

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

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

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

 gdb /proc/<pid>/exe <pid>
 (gdb) where
Run Code Online (Sandbox Code Playgroud)