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

how to see stack trace for a particular thread within a hanged process in Linux

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

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

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

   # gdb ./yourbinary

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

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

   # gdb --pid=<YOUR PID>

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