调试系列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
系统运行时间:
------ UPTIME (`uptime`) ------
up time: 00:01:53, idle time: 00:02:44, sleep time: 00:00:00
[uptime: 0.015s elapsed]
- up time:系统运行时长
- idle time:系统空闲时长
- sleep time:系统休眠时长
- elapsed: uptime指令执行时长
2. 内存/CPU/进程等信息
下面列举bugreport结果相关项的title,其中括号中内容便是相应的命令
------ UPTIME MMC PERF (/sys/block/mmcblk0/) ------
------ MEMORY INFO (/proc/meminfo) ------
------ CPU INFO (top -n 1 -d 1 -m 30 -t) ------
------ PROCRANK (procrank) ------
------ VIRTUAL MEMORY STATS (/proc/vmstat) ------
------ VMALLOC INFO (/proc/vmallocinfo) ------
------ SLAB INFO (/proc/slabinfo) ------
------ ZONEINFO (/proc/zoneinfo) ------
------ PAGETYPEINFO (/proc/pagetypeinfo) ------
------ BUDDYINFO (/proc/buddyinfo) ------
------ FRAGMENTATION INFO (/d/extfrag/unusable_index) ------
------ KERNEL WAKELOCKS (/proc/wakelocks) ------
------ KERNEL WAKE SOURCES (/d/wakeup_sources: 1970-01-01 08:00:00) ------
------ KERNEL CPUFREQ (/sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state) ------
------ KERNEL SYNC (/d/sync) ------
------ PROCESSES (ps -P) ------
------ PROCESSES AND THREADS (ps -t -p -P) ------
------ PROCESSES (SELINUX LABELS) (ps -Z) ------
------ LIBRANK (librank) ------
这里的涉及的信息较多,这里就先介绍下/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。
stat: 51897 32911 5984151 171690 198408 171047 29988513 2001070 0 334260 2172230
stat: read: 17845KB/s write: 1233KB/s
mmcblk0p24/stat: 16 28 346 50 6 2 64 20 0 70 70
mmcblk0p24/stat: read: 3543KB/s write: 1638KB/s
...
另外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可获取
------ KERNEL LOG (dmesg) ------
4. lsof、map及Wait-Channels
4.1 lsof
------ LIST OF OPEN FILES (/system/xbin/su root lsof) ------
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zygote 286 root mem ??? b3:17 16384 2827 /system/vendor/lib/libcneconn.so
...
所有进程打开的文件,例如pid=286的zygote进程打开libcneconn.so文件。
4.2 show map
------ SHOW MAP 1 (/init) (/system/xbin/su root showmap 1) ------
------ SHOW MAP 2 () (/system/xbin/su root showmap 2) ------
...
------ SHOW MAP 3649 () (/system/xbin/su root showmap 3649) ------
所有进程的show map
4.3 Wait-Channels
------ BLOCKED PROCESS WAIT-CHANNELS ------
1 /init SyS_epoll_wait
...
所有线程的Wait-Channels,记录着所有线程最后停留所在位置,例如上面是指pid=1的进程init,最后blocked在SyS_epoll_wait方法内。
5. system log
------ SYSTEM LOG (logcat -v threadtime -d *:v) ------
6. event log
------ EVENT LOG (logcat -b events -v threadtime -d *:v) -----
7. radio log
------ RADIO LOG (logcat -b radio -v threadtime -d *:v) ------
另外log统计信息,记录main/radio/events/system/crash/kernel各个log使用情况 —— LOG STATISTICS (logcat -b all -S) ——
8. vm traces
------ VM TRACES JUST NOW (/data/anr/traces.txt.bugreport: 2016-06-09 18:57:29) ------
------ VM TRACES AT LAST ANR (/data/anr/traces.txt: 2016-06-09 18:47:39) ------
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,否则输出:
*** NO ANR VM TRACES FILE (/data/anr/traces.txt): No such file or directory
8.3 tombstones信息
tombstones则是由debuggerd生成的,后续再单独用一篇文章来说明debuggerd的工作原理
------ TOMBSTONE (/data/tombstones/tombstone_01: 2016-06-18 11:16:18) ------
如果tombstones文件不存在则输出:
*** NO TOMBSTONES to dump in /data/tombstones
9. network
------ NETWORK DEV INFO (/proc/net/dev) ------
------ QTAGUID NETWORK INTERFACES INFO (/proc/net/xt_qtaguid/iface_stat_all) ------
------ QTAGUID NETWORK INTERFACES INFO (xt) (/proc/net/xt_qtaguid/iface_stat_fmt) ------
------ QTAGUID CTRL INFO (/proc/net/xt_qtaguid/ctrl) ------
------ QTAGUID STATS INFO (/proc/net/xt_qtaguid/stats) ------
10. last kernel log
------ LAST KMSG (/proc/last_kmsg) ------
11. last system log
------ LAST LOGCAT (logcat -L -v threadtime -b all -d *:v) ------
12. ip相关
------ NETWORK INTERFACES (ip link) ------
------ IPv4 ADDRESSES (ip -4 addr show) ------
------ IPv6 ADDRESSES (ip -6 addr show) ------
------ IP RULES (ip rule show) ------
------ IP RULES v6 (ip -6 rule show) ------
------ RT_TABLES (/data/misc/net/rt_tables: 2016-06-08 22:21:12) ------
------ ROUTE TABLE IPv4 (ip -4 route show table 255) ------
------ ROUTE TABLE IPv6 (ip -6 route show table 255) ------
...
------ ARP CACHE (ip -4 neigh show) ------
------ IPv6 ND CACHE (ip -6 neigh show) ------
------ IPTABLES (/system/xbin/su root iptables -L -nvx) ------
------ IP6TABLES (/system/xbin/su root ip6tables -L -nvx) ------
------ IPTABLE NAT (/system/xbin/su root iptables -t nat -L -nvx) ------
------ IPTABLE RAW (/system/xbin/su root iptables -t raw -L -nvx) ------
------ IP6TABLE RAW (/system/xbin/su root ip6tables -t raw -L -nvx) ------
------ WIFI NETWORKS (/system/xbin/su root wpa_cli IFNAME=wlan0 list_networks) ------
13. 中断向量表
中断向量表,记录着中断号对应的中断模块。
------ INTERRUPTS (1) (/proc/interrupts) ------
------ NETWORK DIAGNOSTICS (dumpsys connectivity --diag) ------
------ INTERRUPTS (2) (/proc/interrupts) ------
14. property信息
------ SYSTEM PROPERTIES ------
------ VOLD DUMP (vdc dump) ------
------ SECURE CONTAINERS (vdc asec list) ------
------ FILESYSTEMS & FREE SPACE (df) ------
15. last radio log
------ LAST RADIO LOG (parse_radio_log /proc/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相关
------ BINDER FAILED TRANSACTION LOG (/sys/kernel/debug/binder/failed_transaction_log) ------
------ BINDER TRANSACTION LOG (/sys/kernel/debug/binder/transaction_log) ------
------ BINDER TRANSACTIONS (/sys/kernel/debug/binder/transactions) ------
------ BINDER STATS (/sys/kernel/debug/binder/stats) ------
------ BINDER STATE (/sys/kernel/debug/binder/state) ------
紧接着之后还有:
------ DUMP VENDOR RIL LOGS (/system/xbin/su root vril-dump) ------
17. dumpsys相关:
------ DUMPSYS (dumpsys) ------
通过dumpsys -l
可查看系统所有服务,不带参数的dumpsys
命令会输出系统中所有的服务:每个服务开头信息:
DUMP OF SERVICE SurfaceFlinger:
DUMP OF SERVICE alarm:
DUMP OF SERVICE cpuinfo:
DUMP OF SERVICE dropbox:
...
18. dumpsys checkin相关
------ CHECKIN BATTERYSTATS (dumpsys batterystats -c) ------
------ CHECKIN MEMINFO (dumpsys meminfo --checkin) ------
------ CHECKIN NETSTATS (dumpsys netstats --checkin) ------
------ CHECKIN PROCSTATS (dumpsys procstats -c) ------
------ CHECKIN USAGESTATS (dumpsys usagestats -c) ------
------ CHECKIN PACKAGE (dumpsys package --checkin) ------
dumpsys电池统计,内存、网络统计、进程、使用情况、包这些统计类信息。
19. dumpsys app相关
------ APP ACTIVITIES (dumpsys activity all) ------
------ APP SERVICES (dumpsys activity service all) ------
------ APP SERVICES (dumpsys activity provider all) ------
dumpsys应用activity信息以及service和provider信息。
20. Tips
当需要搜索bugreport中内容时,可通过搜索------
查找所有的子项目。 比如查看dumpsys信息,则可通过搜索------ DUMPSYS
即可跳转到相应内容的开头。
bugreport具体内容涉及面很广,后续文章会介绍bugreport涉及的DropBoxManagerService,debuggerd等相关问题。 这里先说说一款开源的bugreport分析工具
二、ChkBugReport
ChkBugReport是一款由sonymobile开源的工具,用于分析Bugreport并提供可视化阅读的html格式文件。
2.1 用法
(1)通过命令生成bugreport文件
adb shell bugreport > bugreport.txt
(2)执行chkbugreport,命令中.jar 和.txt都必须填写相应文件所在的完全路径。
java –jar chkbugreport.jar bugreport.txt
当然也可以把.jar添加到path,则直接使用chkbugreport bugreport.txt
(3) 通过浏览器打开/bugreport_out/index.html,可视化信息便呈现眼前。
2.2 chkbugreport分析
- chkbugreport源码位于github;
- chkbugreport jar直接下载,现有jar比较老,很久没有维护,建议自行下载源码,重新打包,功能更全。
- chkbugreport实例:
- 进程死锁
- AIDL死锁
- 混合死锁
对于死锁问题,要留意state=MONITOR
的线程,以及main线程的情况。
Tips:Chkbugreport虽然是一款比较方便的可视化分析工具,但分析问题仍不够全面,加上各大厂商会有自身的定制,导致信息遗漏。因此往往很多时候分析问题,只能以Chkbugreport辅助分析,还是需要自己去分析bugreport信息,因此还是很有必要掌握bugreport每一项信息的含义。
调试系列2:bugreport实战篇相关推荐
- 软件调试系列:软件崩溃篇之内存异常崩溃
导致崩溃的情况很多,同样崩溃的表现也是千差万别,既然如此,那么还是让我们先来看一下这个崩溃是如何用Windbg分析的吧. 某年某月某日,测试人员报告说,Sample.exe软件崩溃了,两名开发人员小崔 ...
- QCC304x系列开发教程(实战篇) 之10.2 QCC3040之教你调试入仓和出仓情景下的程序运行
查看全部教程开发请点击:高通蓝牙耳机QCC304x开发详解汇总(持续更新中) 查看本文全部文章请点击:QCC304x系列开发教程(实战篇) 之10.2 QCC3040之教你调试入仓和出仓情景下的程序运 ...
- 调试系列1:bugreport源码篇
framework/native/cmds/bugreport/bugreport.cpp framework/native/cmds/dumpstate/dumpstate.cpp framewor ...
- 微博营销,究竟该怎么做?(实战系列一:粉丝篇)
微博营销,究竟该怎么做?(实战系列一:粉丝篇) --文/IT诗人 代腾飞 2011年9月30日 于成都 微博,这个互联网眼下最炙热可手的明星,可以说走进了千家万户,成了无人不知无人不晓的知名事物, ...
- 利用Spring扩展点模拟MyBatis的注解编程「知识点多多」「扩展点实战系列」- 第448篇
历史文章(文章累计440+) <国内最全的Spring Boot系列之一> <国内最全的Spring Boot系列之二> <国内最全的Spring Boot系列之三> ...
- DSP篇--C6701功能调试系列之 FLASH测试
目录 1. FLASH介绍 2. FLASH功能测试 调试的前期准备可以参考前面的博文:DSP篇--C6701功能调试系列之前期准备_nanke_yh的博客-CSDN博客 1. FLASH介绍 FL ...
- 手撸Spring系列4:IOC/DI 思想(实战篇)
说在前头: 笔者本人为大三在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正. ...
- 手撸Spring系列10:Spring AOP(实战篇)
说在前头: 笔者本人为大三在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正. ...
- 手撸Spring系列13:MyBatis(实战篇)
说在前头: 笔者本人为大三在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正. ...
最新文章
- D3.js可视化库入门视频教程
- python支持向量机框架_Netflix 内部 Python 框架 Metaflow 正式开源,可加速机器学习模型部署...
- linux看到的分区重复,找到了linux分区顺序错乱修复方法
- python3 读取文件的最后一行 非空行
- python大数据分析实例-Python大数据处理案例
- 如何激活React的跟踪模式和打开日志记录
- 数学--数论--莫比乌斯函数
- 计算机编程语言的分类,解释型语言、编译型语言、脚本语言的区别
- WPF疑难杂症之二(全屏幕窗口)
- 非常郁闷,WinForm中正常显示的自定义控件无法在WebForm中正常显示!
- 计算机报临时用户,大师练习win10系统添加临时登录账户win10电脑临时账户的办法?...
- 02-CSS基础与进阶-day4__2018-08-31-21-33-03
- VRTK之手柄事件监听以及重写StartUsing方法实现与物体的交互
- [ZPG TEST 110] 多边形个数【DP】
- vue单页面应用中node做反向代理的原理
- php 显示探针_php 探针
- Python数据获取——图片数据提取
- windows10桌面图标异常,显示为白色图标
- 3、mysql表的操作
- win7系统的电脑怎么提升开机速度
热门文章
- asp.net 百度编辑器 UEditor 上传图片 图片上传配置 编辑器配置 网络连接错误,请检查配置后重试...
- Python操作Mysql实例代码教程(查询手册)
- hdoj_1711_Number Sequence
- 基于WinSvr2012共享文件夹的Hyper-V实时迁移之二文件服务器及迁移用虚拟机的创建...
- c#调用系统资源大集合(二)
- 词形变换和词干提取工具(英文)
- linux系统文件系统个目录介绍,关于linux的文件系统目录详细介绍
- 黑马程序员C++学习笔记(第二阶段核心:面向对象)(二)
- Vue学习笔记之04-computed计算属性
- 夸奖对方代码写的好_我写出这样干净的代码,老板直夸我