调试系列2:bugreport实战篇

一、Bugreport

文章 Bugreport源码篇(一) 从源码角度阐释了Bugreport,那么本文则是从实战角度来说说,如何看懂bugreport,对于通过bugreport获取到内容往往非常长,这里简单划分为19部分,先整体上简单说说每部分log的title信息。

1. 系统build相关信息

系统build信息:

  • dumpstate: date
  • Build: getprop ro.build.display.id
  • Build fingerprint: getprop ro.build.fingerprint
  • Bootloader: getprop ro.bootloader
  • Radio: getprop ro.baseband
  • Network: getprop gsm.operator.alpha
  • Kernel: dump_file /proc/version
  • Command line: cat /proc/cmdline

系统运行时间:

  • up time:系统运行时长
  • idle time:系统空闲时长
  • sleep time:系统休眠时长
  • elapsed: uptime指令执行时长

2. 内存/CPU/进程等信息

下面列举bugreport结果相关项的title,其中括号中内容便是相应的命令

这里的涉及的信息较多,这里就先介绍下/sys/block/mmcblk0/:

命令:dump_files(“UPTIME MMC PERF”, mmcblk0, skip_not_stat, dump_stat_from_fd); 输出/sys/block/mmcblk0/stat节点以及遍历/sys/block/mmcblk0/mmcblk0p/stat。

另外read = 512data3/data4, write = 512data7/data8。

Name 单位 含义
read I/Os requests 已处理的I/O读操作请求个数
read merges requests I/O读操作的合并请求个数
read sectors sectors(512B) 读取的扇区数
read ticks ms 读请求的总等待时间
write I/Os requests 已处理的I/O写操作请求个数
write merges requests I/O写操作的合并请求个数
write sectors sectors(512B) 写入的扇区数
write ticks ms 写请求的总等待时间
in_flight requests 正在处理中的I/O请求数
io_ticks ms 该块设备处于活跃态的总时长
time_in_queue ms 所有请求的总等待时长

3. kernel log

内核log信息,通过命令dmesg可获取

4. lsof、map及Wait-Channels

4.1 lsof

所有进程打开的文件,例如pid=286的zygote进程打开libcneconn.so文件。

4.2 show map

所有进程的show map

4.3 Wait-Channels

所有线程的Wait-Channels,记录着所有线程最后停留所在位置,例如上面是指pid=1的进程init,最后blocked在SyS_epoll_wait方法内。

5. system log

6. event log

7. radio log

另外log统计信息,记录main/radio/events/system/crash/kernel各个log使用情况 —— LOG STATISTICS (logcat -b all -S) ——

8. vm traces

8.1 just now的栈信息

关键词为”VM TRACES JUST NOW”,数据来源”/data/anr/traces.txt.bugreport”

8.2 last ANR的栈信息

关键词为”VM TRACES AT LAST ANR”,数据来源”/data/anr/traces.txt”。

若存在该ANR则输出相应traces,否则输出:

8.3 tombstones信息

tombstones则是由debuggerd生成的,后续再单独用一篇文章来说明debuggerd的工作原理

如果tombstones文件不存在则输出:

9. network

10. last kernel log

11. last system log

12. ip相关

13. 中断向量表

中断向量表,记录着中断号对应的中断模块。

14. property信息

15. last radio log

当然,背光信息 —— BACKLIGHTS ——

  • LCD brightness= dump_file /sys/class/leds/lcd-backlight/brightness
  • Button brightness= dump_file /sys/class/leds/button-backlight/brightness
  • Keyboard brightness= dump_file /sys/class/leds/keyboard-backlight/brightness
  • ALS mode= dump_file /sys/class/leds/lcd-backlight/als
  • LCD driver registers: dump_file /sys/class/leds/lcd-backlight/registers

16. Binder相关

紧接着之后还有:

17. dumpsys相关:

通过dumpsys -l可查看系统所有服务,不带参数的dumpsys命令会输出系统中所有的服务:每个服务开头信息:

18. dumpsys checkin相关

dumpsys电池统计,内存、网络统计、进程、使用情况、包这些统计类信息。

19. dumpsys app相关

dumpsys应用activity信息以及service和provider信息。

20. Tips

当需要搜索bugreport中内容时,可通过搜索------ 查找所有的子项目。 比如查看dumpsys信息,则可通过搜索------ DUMPSYS即可跳转到相应内容的开头。

bugreport具体内容涉及面很广,后续文章会介绍bugreport涉及的DropBoxManagerService,debuggerd等相关问题。 这里先说说一款开源的bugreport分析工具

二、ChkBugReport

ChkBugReport是一款由sonymobile开源的工具,用于分析Bugreport并提供可视化阅读的html格式文件。

2.1 用法

(1)通过命令生成bugreport文件

(2)执行chkbugreport,命令中.jar 和.txt都必须填写相应文件所在的完全路径。

当然也可以把.jar添加到path,则直接使用chkbugreport bugreport.txt

(3) 通过浏览器打开/bugreport_out/index.html,可视化信息便呈现眼前。

2.2 chkbugreport分析

对于死锁问题,要留意state=MONITOR的线程,以及main线程的情况。

Tips:Chkbugreport虽然是一款比较方便的可视化分析工具,但分析问题仍不够全面,加上各大厂商会有自身的定制,导致信息遗漏。因此往往很多时候分析问题,只能以Chkbugreport辅助分析,还是需要自己去分析bugreport信息,因此还是很有必要掌握bugreport每一项信息的含义。

作者微博:@Gityuan

原文出处:Gityuan.com

1 收藏 评论

关于作者:gityuan

Android系统工程师,www.gityuan.com博主,个人新浪微博:http://weibo.com/gityuan 个人主页 · 我的文章 · 3 ·     

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部