Android 的所有版本都支持通过 Android 调试桥 (adb) 获取错误报告;Android 4.2 及更高版本提供一个用于获取错误报告以及通过电子邮件、云端硬盘等分享报告的开发者选项。
获取bugreport,操作如下:
1.确保您已启用“开发人员选项”。
2.在开发者选项中,点按bug report。
3.等待片刻之后,您会收到一条通知,指出 Bug 报告已准备就绪如:Bug report #1 captured。
4.使用命令adb pull /data/user_de/0/com.android.shell/files/bugreports/ D:\logs\SEI300-254-2
导出bugreport
bugreport 定位信息
- 查看事件日志
该日志中包含将二进制格式转换成了字符串形式的日志消息。它比 logcat 日志要清晰明了,但也有些难以阅读。在查看事件日志时,您可以在这一部分中搜索特定进程 ID (PID),以查看相应进程一直在做什么。基本格式为:timestamp PID TID log-level log-tag tag-values。
日志级别包括以下几种:
V:详细
D:调试
I:信息
W:警告
E:错误
ANR 和死锁
找出导致应用无响应 (ANR) 错误和死锁事件的原因,某个应用在一定时间内没有响应(通常是由于主线程被阻塞或繁忙)时,系统会终止该进程并将堆栈转储到 /data/anr。要找出 ANR 背后的罪魁祸首,请为二进制事件日志中的 am_anr 执行 grep 命令
grep "am_anr" bugreport-2015-10-01-18-13-48.txt
Activity
Activity 是一种应用组件,一个 Activity 是用户可以执行的一项明确具体的操作。Activity 通过 ActivityManager 运行进程,因此找出指定 Activity 的所有进程停止和启动事件也有助于进行问题排查。
- 查看处于聚焦状态的 Activity
grep "am_focused_activity" bugreport-2015-10-01-18-13-48.txt
- 查看进程启动事件
grep "Start proc" bugreport-2015-10-01-18-13-48.txt
- 确定设备是否发生系统颠簸,请检查在 am_proc_died 和 am_proc_start 前后的短时间内是否出现活动异常增加
grep -e "am_proc_died" -e "am_proc_start" bugreport-2015-10-01-18-13-48.txt
内存
- 查看历史指标
am_low_memory 条目表示最后一个缓存的进程已终止。在此之后,系统开始终止各项服务grep "am_low_memory" bugreport-2015-10-01-18-13-48.txt
- 查看系统颠簸指标
关于系统颠簸(分页、直接回收等)的其他指标包括kswapd、kworker
和mmcqd
消耗的 CPU 周期。(请注意,收集错误报告可能会影响系统颠簸指标。)
广播
- 查看历史广播
历史广播是指已发送的广播,按时间逆序排列。
summary(摘要)部分用于提供最近 300 个前台广播和最近 300 个后台广播的概况。
grep summary bugreport.txt
detail(详情)部分包含最近 50 条前台广播和最近 50 条后台广播的完整信息,以及每个广播的接收方。其中:
具有 BroadcastRecord 条目的接收方是在运行时注册的,并且只会被发送到已在运行的进程。
具有 ResolveInfo 条目的接收方是通过清单条目注册的。ActivityManager 会为每个 ResolveInfo 启动相应进程(如果相应进程尚未在运行)。
grep detail bugreport.txt