GDB回溯子进程
问题描述:
我有一个应用程序,它分派一个子进程。GDB回溯子进程
子进程做了一些工作,并在中间的某个地方给出了分段错误。我用GDB调试此,我用:
set follow-fork-mode child
我还设置一个断点孩子中的功能。但GDB不会在我的断点处停下来。
另外,父进程处理seg-fault,所以我不得不按ctrl-c退出。然后,当我使用backtrace
打印堆栈我的一切是
没有堆栈
为什么断点未设置,为什么我没有拿到堆栈?
答
为什么断点未设置
断点是设定,但它没有被击中,因为...
,为什么我没有得到堆栈?
......你明显在调试错误的过程。
随着set follow-fork-mode child
,GDB将跟随第一你创建的孩子。也许你创造了不止一个?
调试此方法的一种方法是使用signal
或sigaction
建立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
是你所撰写的孩子计划? – sirgeorge 2012-03-04 05:00:50
不,但我确实有我的来源。 – broun 2012-03-04 05:09:26
你可以在调试模式下从源代码构建它(孩子)吗? – sirgeorge 2012-03-04 05:12:27