如何在 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
或其他任何内容。
我有一个多线程进程在 运行 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
或其他任何内容。