Native进程之Trace原理
作者:袁辉辉
一. 概述
当发生ANR(Application Not Response),对于Java进程可通过kill -3向目标进程发送信号SIGNAL_QUIT, 输出相应的traces信息保存到目录/data/anr/traces.txt;而对于Native进程可通过 debuggerd输出traces信息。
可通过一条命令来获取指定Native进程的traces信息,例如输出pid=17529进程信息:

执行完该命令后直接输出traces信息到屏幕,如下:

接下来说说debuggerd是如何输出Native进程的trace。
二. Debuggerd
文章debuggerd守护进程详细介绍了Debuggerd的工作原理,此处当执行debuggerd -b命令后:
1.Client进程调用send_request()方法向debuggerd服务端发出DEBUGGER_ACTION_DUMP_BACKTRACE命令;
2.Debugggerd进程收到该命令,fork子进程中再执行worker_process()过程
3.子进程通过perform_dump()方法来根据命令DEBUGGER_ACTION_DUMP_BACKTRACE,会调用到dump_backtrace()方法输出backtrace.
接下来,从dump_backtrace()方法讲起:
2.1 dump_backtrace
[-> debuggerd/backtrace.cpp]
![dump_backtrace [-> debuggerd/backtrace.cpp]](https://i-blog.csdnimg.cn/blog_migrate/4ac54f978e2c3d1519cc6f84d495b554.jpeg)
2.2 dump_process_header
[-> debuggerd/backtrace.cpp]
![dump_process_header [-> debuggerd/backtrace.cpp]](https://i-blog.csdnimg.cn/blog_migrate/d0f52a41b370690f6c317bc70e5f8e25.jpeg)
例如:
![dump_process_header [-> debuggerd/backtrace.cpp]](https://i-blog.csdnimg.cn/blog_migrate/b1fd15b84353bb4c542f4ded21679ec1.jpeg)
2.3 dump_thread
[-> debuggerd/backtrace.cpp]
![dump_thread [-> debuggerd/backtrace.cpp]](https://i-blog.csdnimg.cn/blog_migrate/afd9a0ddf162b1add4082485e505d577.jpeg)
2.4 dump_backtrace_to_log
[-> debuggerd/Backtrace.cpp]
![dump_backtrace_to_log [-> debuggerd/Backtrace.cpp]](https://i-blog.csdnimg.cn/blog_migrate/f8d47f70f63fd4268545f65edd7717b5.jpeg)
通过循环遍历输出整个backtrace中的每一栈帧FormatFrameData的信息.
2.5 FormatFrameData
[-> debuggerd/Backtrace.cpp]
![FormatFrameData [-> debuggerd/Backtrace.cpp]](https://i-blog.csdnimg.cn/blog_migrate/72f4680ab3651e7ca7ec1f9353221da0.jpeg)
例如:(这些map信息是由/proc/%d/maps解析出来的)
#01 pc 000000000001cca4 /system/lib64/libc.so (epoll_pwait+32)

2.6 dump_process_footer
[-> debuggerd/backtrace.cpp]
static void dump_process_footer(log_t* log, pid_t pid) {
_LOG(log, logtype::BACKTRACE, "\n----- end %d -----\n", pid);
}
例如:----- end 1789 -----
三. 总结
通过debuggerd -b [pid],可输出Native进程的调用栈,这些信息是通过解析/proc/[pid]/maps而来的。
小米开放平台官方地址:
小米开放平台官方交流群:398616987
想了解更多?
那就赶紧来关注我们
小米开放平台公众号


893

被折叠的 条评论
为什么被折叠?



