如何转储在系统调用(Android的内核)调用堆栈?(how to dump call stack

2019-08-01 05:16发布

我想知道谁被称为* sys_reboot *的时候,手机(安卓)重新启动,意想不到的。

有没有办法来转储在系统调用 (Android的内核)的调用堆栈?

Answer 1:

如果你想成为一个内核调用跟踪,你可以得到通过dump_stack() panic()调用,除其他事项。 的BUG() / BUG_ON() 包装给它一个更具描述性的消息和一个可选的条件测试。

用户级堆栈跟踪 ,特别是象征性的一个,但是,不能可靠地从直接在内核中获得。 这是可能的复制堆栈存储器到内核空间和日志的内容,甚至试探性地走SP / FP联动如果framepointers不是最优的,但是解决的符号,它会需要访问和解析ELF信息。 我不能确定有人已经这样做了纯内核端实现; 一个简单的解决方案将有完成时从您的系统调用挂钩停止程序,生成一个用户空间的调试器附加到它,提取堆栈跟踪,继续实施该方案。

看到这个SO发布, call_usermodehelper / call_usermodehelperpipe使用如何做到这一点。

另见本SO发布: 如何打印在Linux内核空间的用户空间堆栈跟踪另一个参照同样的问题。



文章来源: how to dump call stack in syscall(android kernel) ?