一. 概述 当发生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命令后: 接下来,进程从dump_backtrace()方法讲起: 2.1 dump_backtrace [-> debuggerd/backtrace.cpp] 2.2 dump_process_header [-> debuggerd/backtrace.cpp] 例如: 2.3 dump_thread [-> debuggerd/backtrace.cpp] 2.4 dump_backtrace_to_log [-> debuggerd/Backtrace.cpp] 通过循环遍历输出整个backtrace中的原理每一栈帧FormatFrameData的信息. 2.5 FormatFrameData [-> debuggerd/Backtrace.cpp] 例如:(这些map信息是由/proc/%d/maps解析出来的) 2.6 dump_process_footer [-> debuggerd/backtrace.cpp] 例如:----- end 1789 ----- 三. 总结 通过debuggerd -b [pid],云南idc服务商可输出Native进程的进程调用栈,这些信息是原理通过解析/proc/[pid]/maps而来的。 【本文是进程专栏“小米开放平台”原创文章,“小米开放平台”微信公众号xiaomideveloper】 戳这里,原理看该作者更多好文debuggerd/backtrace.cpp]" title=" dump_backtrace [-> debuggerd/backtrace.cpp]">
debuggerd/backtrace.cpp]" title="dump_process_header [-> debuggerd/backtrace.cpp]">
debuggerd/backtrace.cpp]" title="dump_process_header [-> debuggerd/backtrace.cpp]">
debuggerd/backtrace.cpp]" title="dump_thread [-> debuggerd/backtrace.cpp]">
debuggerd/Backtrace.cpp]" title=" dump_backtrace_to_log [-> debuggerd/Backtrace.cpp]">
debuggerd/Backtrace.cpp]" title=" FormatFrameData [-> debuggerd/Backtrace.cpp]">