如何在Linux中挂起的进程中查看特定线程的堆栈跟踪

时间:2017-09-21 11:39:35

标签: linux multithreading stack-trace callstack pstack

我有一个多线程进程在Linux下运行时卡住了。但我没有pstack的多线程版本(使用gstack制作别名)。因此,gstack <pid>并未向我提供任何内容。我如何(a)将gdb附加到已经运行的进程(b)获取各个线程的堆栈跟踪(c)从threadid知道正在运行的进程(d)的threadid(如果已知)如何查看堆栈在卡住的进程中运行线程的跟踪/调用堆栈?

1 个答案:

答案 0 :(得分:1)

首先,使用选项-O0 -ggdb对其进行编译,以获得最佳调试效果。

如果你可以在gdb下运行,只需运行

   # gdb ./yourbinary

等待问题。当流程卡住时,只需按下^C即可。

如果你不能在gdb下运行,只需:

   # gdb --pid=<YOUR PID>

在这两种情况下,键入info threads,您将看到所有线程。然后选择一个,您可以看到bt或其他任何内容。