错误报告

Catalogue   

获取错误报告

  • 通过开启开发者选项,生成错误报告
  • 通过adb命令获取:adb bugreport D:\Reports

分析错误报告

默认情况下,错误报告是 ZIP 文件。ZIP 文件名类似 bugreport-BUILD_ID-DATE.zip,它可能会包含多个文件,但最重要的文件是 bugreport-BUILD_ID-DATE.txt。此文件就是错误报告,它包含系统服务 (dumpsys)、错误日志 (dumpstate) 和系统消息日志 (logcat) 的诊断输出。系统消息包括设备抛出错误时的堆栈轨迹,以及从所有应用中使用 Log 类写入的消息

查看日志

展示最近时间段内的日志

1
2
3
4

------ SYSTEM LOG (logcat -v threadtime -v printable -v uid -d *:v) ------

------ LOG STATISTICS (logcat -b all -S) ------

ANR和死锁

当某个应用在一定时间内没有响应(通常是由于主线程被阻塞或繁忙)时,系统会终止该进程并将堆栈转储到 /data/anr。要找出 ANR 背后的罪魁祸首,请为二进制事件日志中的 am_anr 执行 grep 命令

  • VM TRACES AT LAST ANR、VM TRACES JUST NOW部分查找堆栈跟踪。

  • WATCHDOG KILLING SYSTEM PROCESS 查找死锁

1
2
3
grep "am_anr" bugreport-xxxx-xx-xx-xx-xx-xx.txt
# 日志中搜索ANR关键字
grep "ANR" bugreport-xxxx-xx-xx-xx-xx-xx.txt

Activity活动

  • am_focused_activity 关键字搜索聚焦Activity
  • Start proc关键字搜索进程启动事件
  • am_proc_died 和 am_proc_start 关键字搜索进程启动和终止事件
1
2
3
4
5
6
7
8
9
# 查看处理聚焦的Activity
grep "am_focused_activity" bugreport-xxxx-xx-xx-xx-xx-xx.txt

# 查看进程启动事件
grep “Start proc” bugreport-xxxx-xx-xx-xx-xx-xx.txt

# 要确定设备是否发生系统颠簸,请检查 am_proc_died 和 am_proc_start 前后在短时间内是否出现活动异常增加
grep -e "am_proc_died" -e "am_proc_start" bugreport-xxxx-xx-xx-xx-xx-xx.txt

内存异常

  • 内存不足可能会导致系统发生颠簸,这是因为虽然内存不足时系统会终止某些进程来释放内存,但又会继续启动其他进程。要查看内存不足的确凿证据,请检查二进制事件日志中 am_proc_died 和 am_proc_start 条目的密集程度.

  • 关于系统颠簸(分页、直接回收等)的其他指标包括 kswapd、kworker 和 mmcqd 消耗的 CPU 周期。

  • am_low_memory 表示最后一个缓存的进程已终止

  • Total PSS by OOM adjustment 列出内存快照

1
2
grep "am_low_memory" bugreport-xxxx-xx-xx-xx-xx-xx.txt

广播

  • Historical broadcasts summary显示广播的历史记录

  • ACTIVITY MANAGER BROADCAST STATE 查看广播监听器

进程

  • DUMP OF SERVICE procstats 部分包含有关进程及相关服务已运行时长的完整统计信息

  • ACTIVITY MANAGER RUNNING PROCESSES 列出部分正在运行的进程

参考