pstack 命令如何工作?

g__*_*__k 5 system libc

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

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

vir*_*tor 5

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

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

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