android Tombstone 流程

article/2025/10/6 22:58:57

一 总述

下面是一份dump 的log:

810   876 I system_server: libdebuggerd_client: started dumping process 678
740   740 I /system/bin/tombstoned: registered intercept for pid 678 and type kDebuggerdNativeBacktrace
678   678 I libc    : Requested dump for tid 678 (cameraserver)
740   740 I /system/bin/tombstoned: received crash request for pid 678
740   740 I /system/bin/tombstoned: enqueueing crash request for pid 678
740   740 I /system/bin/tombstoned: found intercept fd 512 for pid 678 and type kDebuggerdNativeBacktrace
7840  7840 I crash_dump32: performing dump of process 678 (target tid = 678)

涉及到的模块有:

1 system_server

2 debuggerd

3 target_pid

4 crash_dump

5 debuggerd_client

6 tombstoned

1和2 system_server 和debuggerd都是调用的5 debuggerd_client 实现的。

二者区别:

system_server 可能是写到文件中的,如anr文件;

debuggerd是打印到标准输出上STDOUT_FILENO

3 target_pid 与4 crash_dump 是同一个code,3 target_pid会在fork出来一个进程(就是4 crash_dump)实现dump  trace的功能

总体实现方法是:

1 各进程间的通信是使用socket实现的。

2 当建立socket 通信后,debuggerd_client会发送signal 给target_pid,target_pid使用signal catcher处理对应的signal信号,就是crash_dump逻辑了。

二  ANR触发dump trace信息

举例system server中的逻辑:抓anr的trace信息

watchdog里面会监控system server主要service的状态,如果发生anr就会监控到,然后调用ActivityManagerService.dumpStackTrace API,。

这个api中会有需要dump的进程信息,其中watchdog中指定dump的native 进程,ams 还会其他check的extra 进程。

然后for循环dump每个进程的trace信息。

ams>android_os_Debug>debuggerd_client.dump_backtrace_to_file_timeout>debuggerd_trigger_dump

这些API都是在system_server 进程中。

debuggerd进程的实现也依赖这个debuggerd_trigger_dump。

debuggerd_trigger_dump 就是在debuggerd_client中实现的了。后面再介绍。

三 tombstoned 进程

开机就会启动的进程,

创建三个socket:

constexpr char kTombstonedCrashSocketName[] = "tombstoned_crash";
constexpr char kTombstonedJavaTraceSocketName[] = "tombstoned_java_trace";
constexpr char kTombstonedInterceptSocketName[] = "tombstoned_intercept";

1 tombstoned与debuggerd_client 的通信是使用socket "tombstoned_intercept"。

debuggerd_client 向tombstoned_intercept发送InterceptRequest 请求,tombstone中的intercept_manager 处理该请求,并返回intercept的状态,如register/started/failed等。

2 tombstoned 与crash_dump的通信使用socket “tombstoned_crash” 或“tombstoned_java_trace”,这个是根据dump的type决定的。

crash_dump建立联系后,向tombstoned发送kDumpRequest 请求,然后tombstoned返回kPerformDump,并同outputfd一块返回。

所以tombstoned逻辑中会有两个逻辑:一个是处理intercept(使用intercept_manager)另一个是处理crash_request.

四 crash_dump64 进程

这个是dump进程的东西,往dump进程中发送signal 信息,这边就会收到signal 信号,然后由signal 处理程序处理。

然后fork一个进程专门处理dump的功能。

在新进程中,

1与tombstoned 建立socket 通信,

2 发送kDumpRequest并等待kPerformDump。

3 dump的逻辑

4 通知dump conplete

五 总体流程

A tombstone 进程启动,创建好三个socket

B 各进程启动,加载signal catcher

C 出现anr情况, system server watchdog 逻辑monitor 问题,触发ams.dumpstacktrace

然后就是上图的流程了

复杂的是tombstoned的消息处理逻辑:

intercept msg使用InterceptManager

crash msg使用内部的crash和crashQueue

intercept_manager.cpp中 intercept_accept_cb/ intercept_request_cb / intercept_close_cb

tombstoned.cpp中 crash_accept_cb/crash_request_cb/ crash_completed_cb/perform_request

intercept_request_cb 处理与debuggerd_client的通信,接收request,发送register和started

crash_request_cb/perform_request 处理与crash_dump的通信,接收kDumpRequest/发送kPerformDump

perform_request 里面会check intercept_manager 中是否有匹配项,并将获取其outputfd。

当crash_dump将所有需要的堆栈信息获取到后,通知tombstone kCompletedDump

tombstone中由crash_completed_cb 接收complete消息,并打印写到什么文件中。

【注意outputfd】

如果是system server获取的anr信息,则outputfd是anr文件,是由debuggerd_client 通过socket传递给intercept_manager 中,保存在数组中。

在接收到dumpRequest命令后,tombstone会check intercept数组,获取到对应的outputfd,传递给crash_dump 进程中,所有的dump实现中都是直接写到这个outputfd中了。

如果是target _pid 自己出现的crash等信息,这个outputfd 就是在tombstoned中自己创建的,

perform_request > null = GetIntercept > CrashQueue::for_crash(crash.get())->get_output(crash->crash_type) >  create_temporary_file 

crash_completed_cb > crash_completed > rename_tombstone_fd > /data/tombstones/tombstone_00 


http://chatgpt.dhexx.cn/article/eK2y5Yoo.shtml

相关文章

android tombstone log分析

今天和大家一起聊聊android 中出现的 Tombstone问题,近期在定制pad 上分析设备概率性重启,导出bugreport日志后,除了看到anr log外,同级目录下还看到了tombstones 并且对比以往日志,发现都生产了大量tombstone...,于是…

深入学习tombstone和signal

三驾马车(CPU,内存和存储设备)中,跑得最慢的就是存储设备了 电脑上,从HDD 到SSD,从SATA SSD到PCIe SSD,硬盘是越来越快; 手机上,从SD卡,到eMMC卡&#xff0…

tombstone

1.什么是tombstone 当一个动态库(native 程序)开始执行时,系统会注册一些连接到 debuggerd 的 signal handlers,当系统 crash 的时候,会保存一个 tombstone 文件到/data/tombstones目录下(Logcat中也会有相…

Tombstone原理分析

本文主要围绕三个问题对tombstone进行分析和介绍,debuggerd是如何监控进程并生成tombstone的?tombstone文件中的信息都是什么,是怎么获取的?tombstone文件应该怎么分析? 一、Tombstone简介 当一个native程序开始执行时…

【date】Linux date命令修改时间的问题

Linux date命令修改时间的问题 问题路径找原因解决方法 问题 Android10;高通平台 使用下面date命令修改时间日期,时分秒生效,年月日不生效 > date -D YYYY-MM-DD hh:mm:ss 路径 \android\external\toybox\toys\posix\date.c \android\e…

i2ctools工具移植到android(使用NDK方式 在某android平台测试)

前提条件 主板i2c已在设备树配置status和引脚复用正常,即设备的i2c总线达到正常使用条件I2C device interface假设内核已配置进去 编译工具链NDK环境搭建 下载NDK 下载地址点我解压 ~/workspace/ndk$ ls android-ndk-r22b android-ndk-r22b-linux-x86_64.zip …

高通平台 Android9 adb shell “hwclock -w“ 报错

hwclock -w 报错 文章目录 hwclock -w 报错问题现象分析1. hwclock命令分析2. /dev/rtc0驱动节点分析 修改设备树后hwclock -w报错没有了,但是系统会重启,原因未知 问题现象 sdm660_64:/ # hwclock -w hwclock: ioctl 4024700a: Invalid argument分析 …

Android top命令、ps命令、busybox命令

top命令 usage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p PID,] [-u USER,]Show process activity in real time.-H Show threads -k Fallback sort FIELDS (default -S,-%CPU,-ETIME,-PID) -o Show FIELDS (def PID,USER,PR,N…

OpenHarmony啃论文俱乐部—盘点开源鸿蒙引用的三方开源软件[1]

目录这里写自定义目录标题 OpenHarmony third_party三方库:学术研究和参与开源的结合third_party_openh264third_party_ninjathird_party_gnthird_party_markupsafethird_party_toyboxthird_party_gstreamerthird_party_ffmpegthird_party_mtdevthird_party_flutter…

Android缺少awk工具的几种解决方法

在日常测试中,我们会用到各种各样的Android平台,用于测试存储设备的性能。其中,我们依赖到Android平台自身的工具,通过编写shell脚本来实现测试存储设备的性能。   而awk工具(shell命令)在shell脚本中会经常用到,一般…

toybox 和 busybox 的作用

来自知乎:程序员秘书 ##前言## 我们在做android开发时,经常会有在板子系统里要修改文件内容对比验证问题,或者要操作特殊的shell命令操作看些信息,等等一些需求。但是往往会因为刷到板子的系统里默认没有/不支持相关的命令&…

欢乐听:一个简洁的瀑布流模式的音乐分享站

欢乐听 一个简洁的瀑布流模式的音乐分享站。

分享5个高质无损音乐网站,歌曲很丰富,爱听歌的小伙伴有耳福了

生活中很多人都离不开音乐,散步的时候听音乐,等待的时候听着音乐,心情不好的时候听音乐,不管走到哪,有音乐的陪伴一点也不寂寞,不同音乐的旋律给我们带来不同的心情,今天小编就给爱听音乐的小伙…

【音乐】收藏的300多首抖音神曲,MP3音乐分享,近一年的抖音歌曲

今天给大家分享N多(300)首抖音神曲。抖音大家都知道,各种火,各种原因,其中的BGM(背景音乐)更是起到了至关重要(画龙点睛)的作用,不知道是哪个大神搞的,去年我搞视频的时候…

搭建一个点歌QQ机器人,另外还能看美女

目录 前言具体实现1、爆照2、生日书3、获取歌词和分享音乐 完整项目下载地址(配置了python环境)完整项目下载地址(电脑没有python环境) 前言 完整项目,包括框架、代码和详细使用说明可以去社区下载(下载完…

基于java的音乐网站的设计与实现

欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 基于java的音乐网站的设计与实现 摘 要 随着互联网和宽带上网的普及,网络传输以其特有的快速、高效、便捷的传输方式越来越被人们接受。在当今社会的影响下&…

android wifi传输音乐,让你通过WiFi分享手机上的歌曲,音乐共享软件MyStream十一发布Android版...

MyStream原来是 iOS上的音乐共享应用,十一期间,它将跨出iOS平台,首次推出Android版音乐共享服务。 MyStream和主流的Pandora、Spotify、Turntable.fm、Songza这些音乐分享服务并不一样。它将手机上的本地音乐通过WiFi或蓝牙和周围的设备进行音…

竞品分析:网易云音乐和QQ音乐,音乐类app的战场

文章从产品的角度分别分析两款产品的行业市场、功能、业务模式以及运营策略,进一步了解两款产品的差异与不同。 一、产品概况 1. 产品概述及版本 网易云音乐是一款专注于发现与分享的音乐产品,依托专业音乐人、DJ、好友推荐及社交功能,为用…

网易云音乐竞品分析

概述 1.原因 个人平时使用网易云较多,正好想学学竞品分析怎么写。因此,想通过梳理市场最新报告和数据表现,了解在线音乐行业的现状和市场情况;分析网易云音乐目前的市场地位、功能设计、UI设计等方面,与相关竞品进行对…

音乐平台程序源码分享

简介: 这是一个音乐分享平台源码,用户可以自行上传音乐分享,源码自适应手机,使用很方便。 安装说明: 演示环境:宝塔PHP5.5 mysql5.6 Apache 2.4.46,把程序上传到根目录,然后修改数…