我想知道谁被称为* sys_reboot *的时候,手机(安卓)重新启动,意想不到的。
有没有办法来转储在系统调用 (Android的内核)的调用堆栈?
我想知道谁被称为* sys_reboot *的时候,手机(安卓)重新启动,意想不到的。
有没有办法来转储在系统调用 (Android的内核)的调用堆栈?
如果你想成为一个内核调用跟踪,你可以得到通过dump_stack()
panic()
调用,除其他事项。 的BUG()
/ BUG_ON()
包装给它一个更具描述性的消息和一个可选的条件测试。
甲用户级堆栈跟踪 ,特别是象征性的一个,但是,不能可靠地从直接在内核中获得。 这是可能的复制堆栈存储器到内核空间和日志的内容,甚至试探性地走SP
/ FP
联动如果framepointers不是最优的,但是解决的符号,它会需要访问和解析ELF信息。 我不能确定有人已经这样做了纯内核端实现; 一个简单的解决方案将有完成时从您的系统调用挂钩停止程序,生成一个用户空间的调试器附加到它,提取堆栈跟踪,继续实施该方案。
看到这个SO发布, call_usermodehelper / call_usermodehelperpipe使用如何做到这一点。
另见本SO发布: 如何打印在Linux内核空间的用户空间堆栈跟踪另一个参照同样的问题。