有没有办法查看特定进程的堆栈?
答
唯一的方法是使用调试器或调试API(适用于linux的ptrace
)。
基本上你想要做的是:
- 附加到该进程(
PTRACE_ATTACH
) - 得到线程上下文线程上下文(
PTRACE_GETREGS
) - 获取堆栈指针的值(可能是
esp
或rsp
) - 使用ptrace从进程读取内存,从堆栈指针的地址开始(
PTRACE_PEEKDATA
或/proc/<pid>/mem
) - 从过程(
PTRACT_DETACH
)
从那里分离,分析是相当多的给你。你可能想看看我的调试器edb。有关更多详细信息,当然你应该使用'/ proc/pid /'信息怎么样?man ptrace
? – 2011-06-07 13:57:26
@Fredrik:'/ proc/ /'中有很多信息,但是除非您使用调试API连接到另一个进程,否则您无法“查看另一个进程的堆栈”。否则,程序可能会随意窥探其他程序的数据,这会很糟糕:-P。 –
2011-06-07 14:00:32
我们可以创建一个Linux内核的调试版本,它将打印出栈中的内容吗? – user350556 2011-06-07 14:06:45