Linux内核调试方法总结之bugreport

bugreport

【用途】Android性能分析工具,bugreport记录了Android启动过程日志,启动后的系统状态,包括进程列表、内存信息、VM信息等

【使用方法】

Adb bugreport > bugreport.txt (导出bugreport信息)

【日志分析】

(1)dumpstate

 

MEMORY INFO

 

获取该log:读取文件/proc/meminfo

 

系统内存使用状态

 

CPU INFO

 

获取该log:执行/system/bin/top -n 1 -d 1 -m 30 -t

 

系统CPU使用状态

 

PROCRANK

 

获取该log:执行/system/bin/procrank

 

执行/system/xbin/procrank后输出的结果,查看一些内存使用状态

 

VIRTUAL MEMORY STATS

 

获取该log:读取文件/proc/vmstat

 

虚拟内存分配情况

 

vmalloc申请的内存则位于vmalloc_start~vmalloc_end之间,与物理地址没有简单的转换关系,虽然在逻辑上它们也是连续的,但是在物理上它们不要求连续。

 

VMALLOC INFO

 

获取该log:读取文件/proc/vmallocinfo

 

虚拟内存分配情况

 

SLAB INFO

 

获取该log:读取文件/proc/slabinfo

 

SLAB是一种内存分配器.这里输出该分配器的一些信息

 

ZONEINFO

 

获取该log:读取文件/proc/zoneinfo

 

zone info

 

SYSTEM LOG(需要着重分析)

 

获取该log:执行/system/bin/logcat -v time -d *:v

 

会输出在程序中输出的Log,用于分析系统的当前状态

 

VM TRACES

 

获取该log:读取文件/data/anr/traces.txt

 

因为每个程序都是在各自的VM中运行的,这个Log是现实各自VM的一些traces

 

EVENT LOG TAGS

 

获取该log:读取文件/etc/event-log-tags

 

EVENT LOG

 

获取该log:执行/system/bin/logcat -b events -v time -d *:v

 

输出一些Event的log

 

RADIO LOG

 

获取该log:执行/system/bin/logcat -b radio -v time -d *:v

 

显示一些无线设备的链接状态,如GSM,PHONE,STK(Satellite Tool Kit)...

 

NETWORK STATE

 

获取该log:执行/system/bin/netcfg (得到网络链接状态)

 

获取该log:读取文件/proc/net/route (得到路由状态)

 

显示网络链接和路由

 

SYSTEM PROPERTIES

 

获取该log:参考代码实现

 

显示一些系统属性,如Version,Services,network...

 

KERNEL LOG

 

获取该log:执行/system/bin/dmesg

 

显示Android内核输出的Log

 

KERNEL WAKELOCKS

 

获取该log:读取文件/proc/wakelocks

 

内核对一些程式和服务唤醒和休眠的一些记录

 

KERNEL CPUFREQ

 

(Linux kernel CPUfreq subsystem) Clock scaling allows you to change the clock speed of the CPUs on the fly.

 

This is a nice method to save battery power, because the lower the clock speed is, the less power the CPU consumes.

 

PROCESSES

 

获取该log:执行ps -P

 

显示当前进程

 

PROCESSES AND THREADS

 

获取该log:执行ps -t -p -P

 

显示当前进程和线程

 

LIBRANK

 

获取该log:执行/system/xbin/librank

 

剔除不必要的library

 

BINDER FAILED TRANSACTION LOG

 

获取该log:读取文件/proc/binder/failed_transaction_log

 

BINDER TRANSACTION LOG

 

获取该log:读取文件/proc/binder/transaction_log

 

BINDER TRANSACTIONS

 

获取该log:读取文件/proc/binder/transactions

 

BINDER STATS

 

获取该log:读取文件/proc/binder/stats

 

BINDER PROCESS STATE

 

获取该log:读取文件/proc/binder/proc/*

 

bind相关的一些状态

 

FILESYSTEMS

 

获取该log:执行/system/bin/df

 

主要文件的一些容量使用状态(cache,sqlite,dev...)

 

PACKAGE SETTINGS

 

获取该log:读取文件/data/system/packages.xml

 

系统中package的一些状态(访问权限,路径...),类似Windows里面的一些lnk文件吧.

 

PACKAGE UID ERRORS

 

获取该log:读取文件/data/system/uiderrors.txt

 

错误信息

 

KERNEL LAST KMSG LOG

 

最新kernel message log

 

LAST RADIO LOG

 

最新radio log

 

KERNEL PANIC CONSOLE LOG

 

KERNEL PANIC THREADS LOG

 

控制台/线程的一些错误信息log

 

BACKLIGHTS

 

获取该log:获取LCD brightness读/sys/class/leds/lcd-backlight/brightness

 

获取该log:获取Button brightness读/sys/class/leds/button-backlight/brightness

 

获取该log:获取Keyboard brightness读/sys/class/leds/keyboard-backlight/brightness

 

获取该log:获取ALS mode读/sys/class/leds/lcd-backlight/als

 

获取该log:获取LCD driver registers读/sys/class/leds/lcd-backlight/registers

 

获取相关亮度的一些信息

 

(2)build.prop

VERSION INFO输出下列信息

当前时间

当前内核版本:可以读取文件(/proc/version)获得

显示当前命令:可以读取文件夹(/proc/cmdline)获得

显示系统build的一些属性:可以读取文件(/system/build.prop)获得

输出系统一些属性

gsm.version.ril-impl

gsm.version.baseband

gsm.imei

gsm.sim.operator.numeric

gsm.operator.alpha

 

(3)dumpsys

执行/system/bin/dumpsys后可以获得这个log.

经常会发现该log输出不完整,因为代码里面要求该工具最多只执行60ms,可能会导致log无法完全输出来.

可以通过修改时间参数来保证log完全输出.

信息:

Currently running services

DUMP OF SERVICE services-name(running)

posted on 2016-04-23 14:34  者旨於陽  阅读(990)  评论(0编辑  收藏  举报

导航