5

我很好奇 pstack 命令如何打印在 PID 下运行的所有线程的堆栈跟踪?

它必须与 gdb 的方式有所不同,因为进程在 gdb 环境中运行,但 pstack 是在进程执行之后执行的。

4

2 回答 2

4

这与 gdb 的总体思路相同。pstack 使用 ptrace,它允许外部进程附加到已知的 pid 并打印出信息(通过当前寄存器知道堆栈)。

如果您想确切了解它是如何完成的,请查找有关ptrace.

此外,进程并没有真正在“gdb 内部”运行。您可以通过运行将 gdb 附加到正在运行的进程,而不会遇到太多麻烦gdb executable pid

于 2010-07-07T10:25:55.657 回答
1

pstack 打印与 cat /proc/"pid"/tasks/*/stack 类似的输出,因此它很可能是读取 procfs 而不是使用 ptrace。

于 2018-06-15T06:09:52.930 回答