我有一个多线程进程在Linux下运行时卡住了。但我没有pstack
的多线程版本(使用gstack
制作别名)。因此,gstack <pid>
并未向我提供任何内容。我如何(a)将gdb
附加到已经运行的进程(b)获取各个线程的堆栈跟踪(c)从threadid知道正在运行的进程(d)的threadid(如果已知)如何查看堆栈在卡住的进程中运行线程的跟踪/调用堆栈?
答案 0 :(得分:1)
首先,使用选项-O0 -ggdb
对其进行编译,以获得最佳调试效果。
如果你可以在gdb下运行,只需运行
# gdb ./yourbinary
等待问题。当流程卡住时,只需按下^C
即可。
如果你不能在gdb下运行,只需:
# gdb --pid=<YOUR PID>
在这两种情况下,键入info threads
,您将看到所有线程。然后选择一个,您可以看到bt
或其他任何内容。