Android 异常分析过程

获取异常的 ANR 或者 tombstones 文件。

ANR文件路径:/data/anr
TombStones路径:/data/tombstones

需要root权限才能直接访问获取,否则提示 Permission denied 。
adb 提供 bugreport 命令来解决这个问题。获取到压缩包后,在 FS/data下分别有anr和tombstones文件夹,里面便是对应文件。

1
2
adb bugreport E:\Reports\MyBugReports
# take a long time

获取对应的符号表

还原堆栈

通常使用 ndk 提供的 addr2line 或者 ndk-stack 进行堆栈还原。ndk-stack 位于 $NDK_HOME 下。addr2line 位于 $NDK_HOME/toolchains 下。

1
2
3
4
5
6
7
# 使用 addr2line 将堆栈地址还原到代码行
# addr2line -e <symbol-path> address
addr2line -e obj/local/x86/libui.so 00006639

# 使用 ndk-stack 自动分析tombstone文件
# ndk-stack -sym <path> [-dump <path>]
ndk-stack -sym obj/local/x86/ -dump ~/android-x86-debug-log/tombstone_01

堆栈分析

信号 描述
SIGSEGV 内存引用无效。
SIGBUS 访问内存对象的未定义部分。
SIGFPE 算术运算错误,除以零。
SIGILL 非法指令,如执行垃圾或特权指令
SIGSYS 糟糕的系统调用
SIGXCPU 超过CPU时间限制。
SIGXFSZ 文件大小限制。