安卓崩溃日志(Tombstone 文件)是系统在应用发生未捕获异常(如 UnhandledException
)或本地崩溃(如 SIGABRT
)时生成的调试文件,通常包含以下关键信息:
NullPointerException
、OutOfMemoryError
。工具 | 功能特点 | 适用场景 |
---|---|---|
Logcat | 系统日志工具,实时输出日志,支持过滤关键词、优先级(如 ERROR )、进程 ID。 | 初步排查崩溃时间点及上下文。 |
Android Studio Analyzer | 可视化工具,自动解析 Tombstone 文件,高亮关键代码行,支持映射源码。 | 快速定位代码问题。 |
Crashlytics | 第三方服务,集成 SDK 后自动收集崩溃日志,提供多维度统计(如设备分布、频率)。 | 线上崩溃监控与统计分析。 |
ACRA(Application Crash Report for Android) | 开源库,捕获未处理异常并发送邮件或上传日志。 | 无后台服务的离线日志收集。 |
Bugsnag/Firebase Crashlytics | 实时崩溃监控,支持多平台(iOS/Android),集成分布式追踪和用户行为分析。 | 复杂项目或跨平台应用。 |
收集日志
adb logcat
命令导出日志,或从设备存储路径(如 /data/tombstones/
)提取 Tombstone 文件。adb logcat -v threadtime > crash_log.txt
解析关键信息
Caused by
或 E/AndroidRuntime
关键字。 at
开头的代码行, at com.example.app.MainActivity.onCreate(MainActivity.java:23)
Dalvik
heap 状态)。复现与验证
adb shell
命令注入变量,验证修复效果。案例:空指针异常(NullPointerException)
E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable com.example.app.CustomView.getText()' on a null object reference
at com.example.app.MainActivity.updateUI(MainActivity.java:45)
MainActivity.java
第 45 行,确认 CustomView
是否初始化。 findViewById
未执行或视图被提前销毁)。 if (customView != null) { customView.getText(); }
问题 | 解决方案 |
---|---|
日志过大难以阅读 | 使用 grep 过滤关键词(如 CRASH ),或通过 Android Studio 的 “Search” 功能定位。 |
无法复现崩溃 | 检查日志中的设备状态(如内存不足、特定系统版本),模拟低内存环境或升级测试设备。 |
第三方库导致崩溃 | 通过堆栈跟踪定位到具体库,更新依赖版本或联系库作者。 |
ABI
、lib
等关键字,堆栈显示 C/C++ 函数调用(如 libc.so
)。 at
开头,显示具体的类名和方法名(如 com.example.app.MainActivity
)。 ndk-stack
工具解析原生堆栈,或通过 Android Studio 的 Systrace 分析渲染问题。mapping.txt
文件将混淆代码还原为源码行号。