Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59136
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 163
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-15 10:56
文章分类

全部博文(8)

文章存档

2017年(4)

2016年(4)

我的朋友

分类: Android平台

2017-02-08 10:56:28

Native进程之Trace原理

作者介绍:

袁辉辉

MIUI系统工程师

. 概述

当发生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]



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解析出来的)

#01 pc 000000000001cca4 /system/lib64/libc.so (epoll_pwait+32)

帧号

pc指针

map_name

(函数名+偏移量)

#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而来的。


小米开放平台官方链接:http://dev.xiaomi.com?hmsr=it168%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93&hmpl=&hmcu=&hmkw=&hmci=

官方QQ交流群:398616987
想要了解更多?
那就关注我们吧!


阅读(7214) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

mi-open2017-02-10 16:34:19

oplain:谢谢分享,[Python 字符串(String)总结](http://www.niaogejc.com/python/python-string.html)[url=http://www.niaogejc.com/python/python-string.html]Python 字符串(String)总结[/url],这个也总结的不错。

回复 | 举报

oplain2017-02-08 16:13:22

谢谢分享,[Python 字符串(String)总结](http://www.niaogejc.com/python/python-string.html)[url=http://www.niaogejc.com/python/python-string.html]Python 字符串(String)总结[/url],这个也总结的不错。