pstack 命令如何工作?

发布于 2024-09-08 15:16:32 字数 107 浏览 4 评论 0原文

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

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

I am curious to find how does the pstack command prints the stack trace of all the threads running under the PID?

It has to be someway different than the way gdb does since the process runs inside the gdb environment, but pstack is executed after the execution of the process.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

相权↑美人 2024-09-15 15:16:32

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

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

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

It's the same general idea as gdb. pstack uses ptrace, which allows an external process to attach to a known pid and print out the information (stack is known via the current registers).

If you want to know exactly how it's done, look for information about ptrace.

Also, processes don't really run "inside the gdb". You can attach gdb to a running process without much trouble by running gdb executable pid.

淡忘如思 2024-09-15 15:16:32

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

pstack print similar output as cat /proc/"pid"/tasks/*/stack so it most likely that it read the procfs rather than using the ptrace.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文