我有一个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?应用程序没有子进程,只有线程。
感谢。
答案 0 :(得分:2)
您的GDB会话表明您没有附加多线程进程的所有线程,并且其他一些线程(一个您没有附加的线程)遇到SIGSEGV
并终止了整个过程。
另一种(有点不太可能)的可能性是你使用的是旧版本的GDB,其中仍然有this bug(该错误已在2009年修复)。
使用gdb -p NNNN
时,您需要小心并指定正确的进程ID。 pgrep daemon-name
或ps aux | grep daemon-name
可以让您了解要附加的流程。
答案 1 :(得分:-1)
获取SIGSEGV后,只需在gdb shell中输入backtrace
或bt
即可。
要探索每个单独线程的堆栈跟踪,请从info thread
开始,然后选择所需的线程,例如thread 3
,然后键入bt
以查看该线程的堆栈跟踪。