博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Native进程之Trace原理
阅读量:6247 次
发布时间:2019-06-22

本文共 1159 字,大约阅读时间需要 3 分钟。

Native进程之Trace原理

作者介绍:

袁辉辉
MIUI系统工程师

一. 概述

当发生ANR(Application Not Response),对于Java进程可通过kill -3向目标进程发送信号SIGNAL_QUIT, 输出相应的traces信息保存到目录/data/anr/traces.txt;而对于Native进程可通过 debuggerd输出traces信息。

可通过一条命令来获取指定Native进程的traces信息,例如输出pid=17529进程信息:

clipboard.png

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

clipboard.png

接下来说说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]

clipboard.png

2.2 dump_process_header

[-> debuggerd/backtrace.cpp]

clipboard.png

例如:

clipboard.png

2.3 dump_thread

[-> debuggerd/backtrace.cpp]

clipboard.png

2.4 dump_backtrace_to_log

[-> debuggerd/Backtrace.cpp]

clipboard.png

通过循环遍历输出整个backtrace中的每一栈帧FormatFrameData的信息.

2.5 FormatFrameData

[-> debuggerd/Backtrace.cpp]

clipboard.png

例如:(这些map信息是由/proc/%d/maps解析出来的)

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

clipboard.png

例如:----- end 1789 -----

三. 总结

通过debuggerd -b [pid],可输出Native进程的调用栈,这些信息是通过解析/proc/[pid]/maps而来的。

小米开放平台官方链接:

官方QQ交流群:398616987

想要了解更多?
那就关注我们吧!

clipboard.png

转载地址:http://islia.baihongyu.com/

你可能感兴趣的文章
MonthCalendar的mousedown方法选择日期
查看>>
用于pytorch的H5Dataset接口(类比TensorDataset接口)
查看>>
Python-入门第三篇
查看>>
解决Cannot change version of project facet Dynamic Web M
查看>>
mysql备份与恢复
查看>>
hadoop实例sort
查看>>
jstat (JVM统计监测工具)
查看>>
git 免密码push,pull
查看>>
js懒加载
查看>>
计算某时间是年中第几周。
查看>>
【论文阅读】A mixed-scale dense convolutional neural network for image analysis
查看>>
用正则表达式匹配网址URL中最后一个反斜杠/后面的内容
查看>>
Define custom @Required-style annotation in Spring
查看>>
General: Know How to Use InetAddress
查看>>
php 克隆和引用类
查看>>
Linux编程之变量
查看>>
weblogic的下载安装及myeclipse的配置
查看>>
android 第一次运行应用的引导界面
查看>>
我的vimrc配置
查看>>
Java运行原理及内存分析
查看>>