有什么方法可以查看特定进程的堆栈吗?

时间:2011-06-07 13:51:08

标签: linux debugging

我想在linux中查看特定进程的堆栈。它可以是任何过程。 我知道GDB可以提供帮助,但我想你需要源代码来分析输出。

1 个答案:

答案 0 :(得分:2)

唯一的方法是使用调试器或调试API(Linux的ptrace)。

基本上你想做的是:

  • 附加到流程(PTRACE_ATTACH
  • 获取线程上下文(PTRACE_GETREGS
  • 来自线程上下文的
  • 获取堆栈指针的值(可能是esprsp
  • 使用ptrace从进程中读取内存,从堆栈指针的地址开始(PTRACE_PEEKDATA/proc/<pid>/mem
  • 与流程分离(PTRACT_DETACH

从那以后,分析几乎取决于你。您可能想要查看我的调试器edb。有关详细信息,您当然应该man ptrace