2011-06-07 73 views
1

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

+0

? – 2011-06-07 13:57:26

+0

@Fredrik:'/ proc/ /'中有很多信息,但是除非您使用调试API连接到另一个进程,否则您无法“查看另一个进程的堆栈”。否则,程序可能会随意窥探其他程序的数据,这会很糟糕:-P。 – 2011-06-07 14:00:32

+0

我们可以创建一个Linux内核的调试版本,它将打印出栈中的内容吗? – user350556 2011-06-07 14:06:45

回答

2

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

基本上你想要做的是:

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

从那里分离,分析是相当多的给你。你可能想看看我的调试器edb。有关更多详细信息,当然你应该使用'/ proc/pid /'信息怎么样?man ptrace

相关问题