GDB回溯子进程

问题描述:

我有一个应用程序,它分派一个子进程。GDB回溯子进程

子进程做了一些工作,并在中间的某个地方给出了分段错误。我用GDB调试此,我用:

set follow-fork-mode child 

我还设置一个断点孩子中的功能。但GDB不会在我的断点处停下来。

另外,父进程处理seg-fault,所以我不得不按ctrl-c退出。然后,当我使用backtrace打印堆栈我的一切是

没有堆栈

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

+0

是你所撰写的孩子计划? – sirgeorge 2012-03-04 05:00:50

+0

不,但我确实有我的来源。 – broun 2012-03-04 05:09:26

+0

你可以在调试模式下从源代码构建它(孩子)吗? – sirgeorge 2012-03-04 05:12:27

为什么断点未设置

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

,为什么我没有得到堆栈?

......你明显在调试错误的过程。

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

调试此方法的一种方法是使用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 
+0

谢谢先生。 – 2016-01-19 21:54:52