pstack命令如何工作?

时间:2010-07-07 10:20:43

标签: system libc

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

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

2 个答案:

答案 0 :(得分:3)

这与gdb的概念相同。 pstack使用ptrace,它允许外部进程连接到已知的pid并打印出信息(堆栈通过当前寄存器得知)。

如果您想确切知道它是如何完成的,请查找有关ptrace

的信息

此外,进程并不真正“在gdb内”运行。您可以通过运行gdb executable pid来轻松地将gdb附加到正在运行的进程。

答案 1 :(得分:0)

pstack打印类似于cat / proc /“pid”/ tasks / * / stack的输出,所以它很可能是读取procfs而不是使用ptrace。