如何在syscall(android内核)中转储调用堆栈?

时间:2012-10-07 07:20:59

标签: android kernel system-calls

我想知道当手机(机器人)意外重启时谁叫了* sys_reboot *。

有没有办法在 syscall (android内核)中转储调用堆栈?

1 个答案:

答案 0 :(得分:1)

如果你想要一个内核呼叫追踪,你可以通过dump_stack()获得。除了别的以外,panic()还要求这样做。 BUG() / BUG_ON() wrappers为其提供了更具描述性的信息和可选的条件测试。

userland stacktrace ,特别是符号的,无法直接在内核中可靠地获取。可以将堆栈内存复制到内核空间并记录内容,如果没有优化帧定点,甚至可以启发式地走SP / FP链接,但要解析符号,它需要访问并解析ELF信息。我不确定是否有人将其作为纯内核端实现;一个更简单的解决方案是从syscall挂钩停止程序,生成附加到它的用户空间调试器,提取堆栈跟踪,完成后继续执行该程序。

请参阅此SO帖子,call_usermodehelper / call_usermodehelperpipe usage了解如何执行此操作。

另请参阅此SO帖子:How to print the userspace stack trace in linux kernelspace以获取对同一问题的另一个引用。