文章Bugreport源码篇(一)从源码角度阐释了Bugreport,那么本文则是从实战角度来说说,如何看懂bugreport,对于通过bugreport获取到内容往往非常长,这里简单划分为17部分,先整体上简单说说每部分log的title信息。
系统build信息:
date
ro.build.display.id
ro.build.fingerprint
ro.bootloader
ro.baseband
gsm.operator.alpha
/proc/version
/proc/cmdline
系统运行时间:
------ UPTIME (`uptime`) ------ up time: 00:01:53, idle time: 00:02:44, sleep time: 00:00:00 [uptime: 0.015s elapsed]
下面列举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: 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 = 512 data3/data4, write = 512 data7/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 | 所有请求的总等待时长 |
内核log信息,通过命令dmesg可获取
------ KERNEL LOG (dmesg) ------
------ 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文件。
------ 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
------ BLOCKED PROCESS WAIT-CHANNELS ------ 1 /init SyS_epoll_wait ...
所有线程的Wait-Channels,记录着所有线程最后停留所在位置,例如上面是指pid=1的进程init,最后blocked在SyS_epoll_wait方法内。
------ SYSTEM LOG (logcat -v threadtime -d *:v) ------
------ EVENT LOG (logcat -b events -v threadtime -d *:v) -----
------ RADIO LOG (logcat -b radio -v threadtime -d *:v) ------
另外log统计信息,记录main/radio/events/system/crash/kernel各个log使用情况 —— LOG STATISTICS (logcat -b all -S) ——
------ 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) ------
关键词为”VM TRACES JUST NOW”,数据来源”/data/anr/traces.txt.bugreport”
关键词为”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
tombstones则是由debuggerd生成的,后续再单独用一篇文章来说明debuggerd的工作原理。
*** NO TOMBSTONES to dump in /data/tombstones
------ 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) ------
------ LAST KMSG (/proc/last_kmsg) ------
------ LAST LOGCAT (logcat -L -v threadtime -b all -d *:v) ------
------ 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) ------
中断向量表,记录着中断号对应的中断模块。
------ INTERRUPTS (1) (/proc/interrupts) ------ ------ NETWORK DIAGNOSTICS (dumpsys connectivity --diag) ------ ------ INTERRUPTS (2) (/proc/interrupts) ------
------ SYSTEM PROPERTIES ------ ------ VOLD DUMP (vdc dump) ------ ------ SECURE CONTAINERS (vdc asec list) ------ ------ FILESYSTEMS & FREE SPACE (df) ------
------ LAST RADIO LOG (parse_radio_log /proc/last_radio_log) ------
当然,背光信息 —— BACKLIGHTS ——
/sys/class/leds/lcd-backlight/brightness
/sys/class/leds/button-backlight/brightness
/sys/class/leds/keyboard-backlight/brightness
/sys/class/leds/lcd-backlight/als
/sys/class/leds/lcd-backlight/registers
------ 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) ------
------ DUMPSYS (dumpsys) ------ ------ 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) ------ ------ APP ACTIVITIES (dumpsys activity all) ------ ------ APP SERVICES (dumpsys activity service all) ------ ------ APP SERVICES (dumpsys activity provider all) ------
这里会先dump所有服务信息(包括Dropbox等服务),然后再dumpsys电池统计,内存、网络统计、进程、使用情况、包以及activity信息。
Tips:当需要搜索bugreport中内容时,可通过搜索 ------
查找所有的子项目。 比如查看dumpsys信息,则可通过搜索 ------ DUMPSYS
即可跳转到相应内容的开头。
bugreport具体内容涉及面很广,下一篇文章介绍这里涉及的DropBoxManagerService,debuggerd等相关问题。
欢迎关注我的微博: Gityuan 。如果觉得我的文章对您所有帮助,请 ¥打赏支持,或者点击下方分享给更多的朋友。您的支持将激励我创作更多技术干货!