android 中断处理流程,Android P的native crash处理流程

一、概述

Android系统有监控程序异常退出的机制,这便是本文要讲述得debuggerd守护进程。当发生native crash或者主动调用debuggerd时,会输出进程相关的状态信息到文件或者控制台。输出的debuggerd数据 保存在文件/data/tombstones/tombstone_XX,该类型文件个数上限位10个,当超过时则每次覆盖时间最老的文件。

针对进程出现的不同的状态,Linux kernel会发送相应的signal给异常进程,捕获signal并对其做相应的处理(通常动作是退出异常进程)。而Android在这机制的前提下,通过拦截这些信号来dump进程信息,方便开发人员调试分析。

debuggerd守护进程会打开socket服务端,当需要调用debuggerd服务时,先通过客户端进程向debuggerd服务端建立socket连接,然后发送不同的请求给debuggerd服务端,当服务端收到不同的请求,则会采取相应的dump操作。

接下来从源码角度来探索debuggerd客户端和服务端的工作原理。

可以作为debuggerd的client端的进程主要有几种:

1.       异常的C/C++程序

这种程序由bionic的linker安装异常信号的处理函数,当程序产生异常信号时,进入信号处理函数,与debuggerd建立。

2.       debuggerd程序

debuggerd可以在控制台中以命令debuggerd -b []启动 ,然后与debuggerd daemon建立连接。这样debuggerd可以在不中断进程执行的情况下dump由tid指定的进程的信息。

3.       dumpstate

控制台中运行命令dumpstate,并指定必要的参数,命令中会调用dump_backtrace_to_file与debuggerd交互。

产生异常信号的C/C++程序与debuggerd建立连接后,debuggerd将进程信息dump到tombstone_XX文件中保存到/data/tombstone/文件夹下。可通过查看tombstone_XX分析异常进程的堆栈信息。

在控制台中以命令debuggerd -b []启动。如果加上-b参数,则由tid指定的进程的信息将dump到控制台上,否则dump到tombstone文件中。控制台中运行命令callstack/dumpstate,进程信息会写入这两个命令指定的文件中。

---------------------

二、debuggerd客户端

debuggerd -b

debuggerd

通过adb执行上面的命令都能触发debuggerd进行相应的dump操作,其中参数-b表示在控制台中输出backtrace,参数tid表示的是需要dump的进程或者线程id。这两个命令的输出结果相差较大,下面来一步步分析看看这两个命令分别能触发哪些操作,执行上述命令都会调用debuggerd的main方法()。

2.1 main

/system/core/debuggerd/debuggerd.cpp

此处就是根据输入的参数给出提示,如果输入的参数没有问题就会执行debuggerd_trigger_dump函数

58int main(int argc, char* argv[]) {

59 if (argc <= 1) usage(0);

60 if (argc > 3) usage(1);

61 if (argc == 3 && strcmp(argv[1], "-b") != 0 && strcmp(argv[1], "--backtrace") != 0) usage(1);

62 bool backtrace_only = argc == 3; //如果是有三个参数,则仅dumptrace,否则生成tombstone

63

64 pid_t pid;

65 if (!android::base::ParseInt(argv[argc - 1], &pid, 1, std::numeric_limits::max())) {

66 usage(1);

67 }

68

69 if (getuid() != 0) {

70 errx(1, "root is required");

71 }

72

73 // Check to see if the process exists and that we can actually send a signal to it.

74 android::procinfo::ProcessInfo proc_info;

75 if (!android::procinfo::GetProcessInfo(pid, &proc_info)) {

76 err(1, "failed to fetch info for process %d", pid);

77 }

78

79 if (proc_info.state == android::procinfo::kProcessStateZombie) {

80 errx(1, "process %d is a zombie", pid);

81 }

82

83 if (kill(pid, 0) != 0) {

84 err(1, "cannot send signal to process %d", pid);

85 }

86

87 unique_fd piperead, pipewrite;

88 if (!Pipe(&piperead, &pipewrite)) {

89 err(1, "failed to create pipe");

90 }

91

92 std::thread redirect_thread = spawn_redirect_thread(std::move(piperead));

93 if (!debuggerd_trigger_dump(pid, backtrace_only ? kDebuggerdNativeBacktrace : kDebuggerdTombstone,

94 0, std::move(pipewrite))) {

95 redirect_thread.join();

96 errx(1, "failed to dump process %d", pid);

97 }

98

99 redirect_thread.join();

100 return 0;

101}

system/core/debuggerd/client/debuggerd_client.cpp

bool debuggerd_trigger_dump(pid_t pid, DebuggerdDumpType dump_type, unsigned int timeout_ms,

unique_fd output_fd) {

//创建socket

97 sockfd.reset(socket(AF_LOCAL, SOCK_SEQPACKET, 0));

98 if (sockfd == -1) {

99 PLOG(ERROR) << "libdebugger_client: failed to create socket";

100 return false;

101 }

102

//连接服务端

103 if (socket_local_client_connect(set_timeout(sockfd.get()), kTombstonedInterceptSocketName,

104 ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_SEQPACKET) == -1) {

105 PLOG(ERROR) << "libdebuggerd_client: failed to connect to tombstoned";

106 return false;

107 }

124int socket_local_client_connect(int fd, const char* name, int namespaceId, int /*type*/) {

125 struct sockaddr_un addr;

126 socklen_t alen;

127 int err;

128

129 err = socket_make_sockaddr_un(name, namespaceId, &addr, &alen);

130

131 if (err < 0) {

132 goto error;

133 }

134

135 if(connect(fd, (struct sockaddr *) &addr, alen) < 0) {

136 goto error;

137 }

138

139 return fd;

140

141error:

142 return -1;

143}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数论中的无数公式 总结

斯特林公式是一条用来取n阶乘近似值的数学公式。一般来说&#xff0c;当n很大的时候&#xff0c;n阶乘的计算量十分大&#xff0c;所以斯特灵公式十分好用&#xff0c;而且&#xff0c;即使在 n很小的时候&#xff0c;斯特灵公式的取值已经十分准确。 公式为&#xff1a; 以下…

计算机怎样连接网络适配器,win10 本地连接共享internet时, 会将承载网络适配器IP设置成192.168.137.1但不成功...

您好&#xff0c;谢谢您&#xff01;我后来参考了http://www.ishanarora.com/2009/07/29/windows-7-as-a-wireless-access-point/ 中的 Jenny提到的方案COMPLETE SOLUTION:### create virtual vwlan hosted port, set AP ssid to advertise, and its password- [cmd] netsh wla…

【POJ - 1001 】Exponentiation (Java大数,高精度)

题干&#xff1a; Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems. This problem requires that you write…

用计算机唱出惊雷,除了《惊雷》还有多少喊麦神曲?这十首神作你一定听过!...

一首《惊雷》可以说是火遍了大江南北&#xff0c;一时间风头无二。而这两天杨坤对《惊雷》的diss、惊雷原唱六道的回应更是成为全网热搜&#xff0c;这也让以《惊雷》为首的“喊麦文化”再次进入了公众的视线。事实上除了《惊雷》&#xff0c;还有不少脍炙人口的喊麦神曲&#…

ACM算法 -- 数论 -- 开灯关灯问题(数论,整数分解,因子个数,公式推导)

有编号1~100个灯泡&#xff0c;起初所有的灯都是灭的。有100个同学来按灯泡开关&#xff0c;如果灯是亮的&#xff0c;那么按过开关之后&#xff0c;灯会灭掉。如果灯是灭的&#xff0c;按过开关之后灯会亮。 现在开始按开关。 第1个同学&#xff0c;把所有的灯泡开关都按一次…

计算机编程是考研什么专业,程序员考研该不该继续选择计算机专业

首先&#xff0c;近些年来确实有不少程序员会选择通过读研来突破自身的岗位发展瓶颈&#xff0c;大部分程序员在读研后也都获得了岗位升级&#xff0c;还有一部分程序员会继续读博&#xff0c;从而进入到科研和教育领域发展。从当前的技术发展趋势和人才需求趋势来看&#xff0…

【牛客 - 185D】星光晚餐(数论,结论,思维,模型)

题干&#xff1a; Johnson和Nancy要在星光下吃晚餐。这是一件很浪漫的事情。 为了增加星光晚餐那浪漫的氛围&#xff0c;他拿出了一个神奇的魔法棒&#xff0c;并且可以按照一定的规则&#xff0c;改变天上星星的亮暗。 Johnson想考考Nancy&#xff0c;在他挥动魔法棒后&#x…

vue 模板 html 表达式,Vue 模板template、指令directive、修饰符

模板 templatetemplate的三种写法写法一&#xff1a;Vue完整版&#xff0c;写在HTML里//html{{n}}1//vuenew Vue({el: #xxx,data(){return{n:0}},methods:{add(){}}})复制代码写法二&#xff1a;Vue完整版&#xff0c;写在选项里//html//vuenew Vue({template: {{n}}1,data(){r…

黄冈学计算机的学校怎么样,广元市黄冈学校怎么样、好不好

问&#xff1a;广元市黄冈学校怎么样、好不好?答&#xff1a;办学四年多来&#xff0c;学校在上级主管部门考核中一直名列前茅&#xff0c;得到广大学生家长的认可&#xff0c;多次受到上级表彰&#xff0c;被评为“民办教育先进集体”&#xff0c;学校环境优美&#xff0c;是…

【 HDU - 1215 】七夕节(数论,约数和公式)

题干&#xff1a; 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" 人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下: 数字N的因子就是所有比N小又能被N整除的…

计算机专业小三门要求,最新小三门选科要求有啥变化?附对比表

原标题&#xff1a;最新小三门选科要求有啥变化&#xff1f;附对比表刚刚&#xff0c;上海市教育考试院公布了2020年拟在沪招生普通高校、军队院校本科专业选考科目要求&#xff0c;让我们今年的选科范围有哪些变化&#xff1f;说明&#xff1a;1 选考范围为不限&#xff0c;说…

【51Nod - 1215 】数组的宽度 (单调栈 或 分治 或 单调队列,算贡献,需去重)

题干&#xff1a; N个整数组成的数组&#xff0c;定义子数组aii..ajj的宽度为&#xff1a;max(ai..aj) - min(ai..aj)&#xff0c;求所有子数组的宽度和。 Input 第1行&#xff1a;1个数N&#xff0c;表示数组的长度。(1 < N < 50000) 第2 - N 1行&#xff1a;每行1…

云昆明理工大学 计算机复试,2012年昆明理工大学计算机考研复试试题(回忆版)...

2012年昆明理工大学计算机考研复试试题(年昆明理工大学计算机考研复试试题(回忆版)回忆版)本试题由http://doc.xuehai.net网友kenden23提供笔试C(总共30分)一、40题选择题(20分)1.派生类调用构造函数时&#xff0c;基类的构造函数先调用&#xff1b;2. int a1,b1,c1,d1,e1;if((…

*【CodeForces - 122C 】Lucky Sum (bfs记录状态,二分查找,有坑)(或分块)

题干&#xff1a; Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal representation contains only the lucky digits 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467 are not. Let next(x) be the…

模拟量使用计算机电缆,DJYPVRP计算机电缆型号规格

计算机电缆用途&#xff1a;本产品适用于额定电压30/500v及以下防干扰性能要求较高的电子计算机、检测仪器、仪表的连接。使用条件&#xff1a; 计算机电缆(电压等级&#xff1a;0.45/0.75KV&#xff0c;企标)本产品使用于交流额定电压为300/500及以下&#xff0c;对于防干扰性…

【CodeForces - 155C】Hometask (字符串,思维,贪心,熟悉句式)(总结)

题干&#xff1a; Sergey attends lessons of the N-ish language. Each lesson he receives a hometask. This time the task is to translate some sentence to the N-ish language. Sentences of the N-ish language can be represented as strings consisting of lowercas…

html 报表插件,轻量级图形报表插件JSCharts

插件描述&#xff1a;JScharts是一个用于在浏览器直接绘制图表的JavaScript工具包。JScharts支持柱状图、圆饼图以及线性图&#xff0c;可以直接将这个图插入网页&#xff0c;JScharts图的数据可以来源于XML文件、JSON文件或JavaScript数组变量。2017-05-09更新&#xff1a;改为…

算法讲解 -- 二分图之 匈牙利算法

匈牙利算法是由匈牙利数学家Edmonds于1965年提出&#xff0c;因而得名。匈牙利算法是基于Hall定理中充分性证明的思想&#xff0c;它是部图匹配最常见的算法&#xff0c;该算法的核心就是寻找增广路径&#xff0c;它是一种用增广路径求二分图最大匹配的算法。 -------等等&…

html 表格文字颜色 css,CSS 表格-JavaScript中文网-JavaScript教程资源分享门户

使用 CSS 可以使 HTML 表格更美观。CompanyContactCountryAlfreds FutterkisteMaria AndersGermanyBerglunds snabbkpChristina BerglundSwedenCentro comercial MoctezumaFrancisco ChangMexicoErnst HandelRoland MendelAustriaIsland TradingHelen BennettUKKniglich EssenP…

计算机专业表白文案,深情表白文案40句

深情表白文案40句时间&#xff1a;2020-05-17 22:41:51 分类&#xff1a;经典语句 | 适合表白的句子 | Word文档下载深情表白文案40句导语&#xff1a;你是我生活的全部&#xff0c;是我一生拼搏奋斗的赌注。为了你披荆斩棘&#xff0c;为了你艰辛受苦&#xff0c;为了你众生…