使用 gdb 时无法获取堆栈跟踪
Can't get stacktrace when SIGSEGV using gdb
我有网络守护进程和请求,使SIGSEGV失败。所以我启动守护进程,使用 gdb 附加,继续,发送请求并得到这个:
$ gdb attach -p 630066
(gdb) c
Continuing.
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
(gdb)
如何在杀死应用程序之前使gdb打印堆栈跟踪?应用程序没有子进程,只有线程。
谢谢。
您的 GDB 会话表示您尚未附加多线程进程的所有线程,并且其他一些线程(您未附加的线程(遇到SIGSEGV
并终止了整个进程。
另一种(有点不太可能(的可能性是您使用的是非常旧版本的 GDB,其中仍然存在此错误(该错误已在 2009 年修复(。
使用gdb -p NNNN
时,需要小心并指定正确的进程 ID。 pgrep daemon-name
或ps aux | grep daemon-name
应该可以让您很好地了解要附加哪个过程。
获取 SIGSEGV 后,只需在 gdb shell 中输入 backtrace
或 bt
。若要浏览每个单独线程的堆栈跟踪,请从 info thread
开始,然后选择所需的线程(例如thread 3
(,然后键入 bt
以查看该线程的堆栈跟踪。
相关文章:
- 如何从 x64 程序集中的堆栈中获取参数?
- 无法获取已填充堆栈<char>的顶部元素
- 如何获取崩溃的DLL的堆栈跟踪?
- 为什么我不能将从我的 BST 获取的这个节点推送到这个堆栈中?
- 如何获取 systemc 线程的堆栈大小
- 使用 gdb 时无法获取堆栈跟踪
- 重载时获取堆栈溢出 >> 运算符函数是为类调用的。我需要进行哪些更改?
- <int> 在不破坏堆栈的情况下获取 C++ 中的堆栈总和
- C 获取器和设定器替代Visual Studio上的呼叫堆栈
- 是否有一种便携式/标准的方法可以在堆栈跟踪中获取文件名和亚麻布
- 如何使用 Win32 API 获取任何线程的堆栈大小和堆栈限制
- 处理POSIX信号:如何在不使用BackTrace_symbols的情况下获取堆栈跟踪
- 无法在 Windows 中获取调用堆栈
- 获取包含共享库的c++应用程序的调用堆栈
- 在安卓 NDK 上获取堆栈跟踪
- 在VB6中获取堆栈跟踪
- 如何在Netbeans C++IDE中获取堆栈跟踪
- 如何获取堆栈跟踪信息
- SymFromAddr 返回ERROR_INVALID_ADDRESS标志,如何在 mingw 中获取堆栈跟踪
- 调用mysql_close获取堆栈损坏,这是MySQL中的一个bug吗?