Android 系统中的 Tombstone 是记录 Native 层崩溃信息的关键日志文件,当应用或系统服务因严重错误(如内存访问异常、空指针解引用等)崩溃时自动生成。以下是其核心机制与分析方法详解:
一、Tombstone 的生成机制
-
触发条件
- 当 Native 代码(C/C++)发生致命错误时(如
SIGSEGV
段错误、SIGABRT
异常终止),Linux 内核会发送信号(Signal)给进程。 - 系统注册的
debuggerd
守护进程捕获信号,收集崩溃现场信息并写入/data/tombstones/
目录,生成tombstone_XX
文件。
- 当 Native 代码(C/C++)发生致命错误时(如
-
文件存储
- 路径:
/data/tombstones/tombstone_00
,tombstone_01
等(需 root 权限访问)。 - 若无 root 权限,可通过
adb bugreport
导出完整报告后提取。
- 路径:
二、Tombstone 文件核心内容解析
文件包含以下关键信息(以典型字段为例):
plaintext
Build fingerprint: 'Android/aosp_device_model' # 设备固件标识
ABI: 'arm64' # CPU架构
pid: 1234, tid: 5678, name: example_thread # 进程/线程ID及名称
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 # 崩溃信号类型和地址
backtrace: # 崩溃堆栈
#00 pc 00012345 /system/lib/libexample.so (functionA+0x10)
#01 pc 00056789 /system/lib/libexample.so (functionB+0x20)
memory map: # 内存映射
00008000-00009000 r-xp 00000000 00:00 0 [heap]
ffff0000-ffff1000 r-xp 00000000 00:00 0 [vectors]
关键字段说明:
signal
与fault addr
SIGSEGV
(信号11):通常由空指针或内存越界引发,fault addr 0x0
表示空指针解引用。SIGABRT
(信号6):断言失败或主动调用abort()
。
backtrace
堆栈调用链,pc
后为崩溃指令的相对地址(需结合符号表解析)。memory map
显示进程加载的模块地址范围,用于验证崩溃地址是否合法(如0x0
属于非法地址)。