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用来打印堆栈时,我得到的就是
没有堆栈
为什么没有设置断点,为什么我没有得到堆栈?
为什么没有设置断点
断点被设定,但它没有被击中,因为......
为什么我没有得到堆栈?
...你显然是在调试错误的过程.
有了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)