当SIGSEGV使用gdb时,无法获得堆栈跟踪

时间:2017-06-20 13:30:14

标签: c++ gdb stack-trace

我有一个web守护进程和请求,它使SIGSEGV失败。所以我启动守护进程,附加gdb,继续,发送请求并得到这个:

$ gdb attach -p 630066

(gdb) c
Continuing.

Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
(gdb) 

如何在杀死应用程序之前制作gdb print stacktrace?应用程序没有子进程,只有线程。

感谢。

2 个答案:

答案 0 :(得分:2)

您的GDB会话表明您没有附加多线程进程的所有线程,并且其他一些线程(一个您没有附加的线程)遇到SIGSEGV并终止了整个过程。

另一种(有点不太可能)的可能性是你使用的是旧版本的GDB,其中仍然有this bug(该错误已在2009年修复)。

使用gdb -p NNNN时,您需要小心并指定正确的进程ID。 pgrep daemon-nameps aux | grep daemon-name可以让您了解要附加的流程。

答案 1 :(得分:-1)

获取SIGSEGV后,只需在gdb shell中输入backtracebt即可。 要探索每个单独线程的堆栈跟踪,请从info thread开始,然后选择所需的线程,例如thread 3,然后键入bt以查看该线程的堆栈跟踪。