0

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

4

1 回答 1

1

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

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

   # gdb ./yourbinary

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

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

   # gdb --pid=<YOUR PID>

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

于 2017-09-21T11:44:54.857 回答