Get Log from Android Systemadb bugreport > bugreport.txt copy bugreport to the current directory. bugreport里面包含了各种log信息,大部分log也可以通过直接运行相关的程序来直接获得. 步骤如下: 1.adb shell 2.进入相关工具程式的目录 3.执行相关程式 4.得到相关信息 下面以输出进程信息为例 1.adb shell 2.输入ps -P 3.可以看到相关进程信息 Log Archive Analysis1.bugreportbugreport记录android启动过程的log,以及启动后的系统状态,包括进程列表,内存信息,VM信息等等到. 2.bugreport结构分析(1)dumpstateMEMORY 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.propVERSION INFO输出下列信息 当前时间 (3)dumpsys执行/system/bin/dumpsys后可以获得这个log. Log Code AnalysisSite: ."frameworks"base"cmds"dumpstate" 相关Log程序的代码可以从上面目录获取 Log Analysis Experience分析步骤1.查看一些版本信息,确认问题的系统环境 2.查看CPU/MEMORY的使用状况,看是否有内存耗尽,CPU繁忙这样的背景情况出现. 3.分析traces,因为traces是系统出错以后输出的一些线程堆栈信息,可以很快定位到问题出在哪里. 4.分析SYSTEM LOG,系统Log详细输出各种log,可以找出相关log进行逐一分析 实例分析下面分析我写的一个测试例子,在OnCreate做一个死循环,这样主线程会被锁住,在按下硬件的Back之后会出现ANR的错误. ----- pid 20597 at 2010-03-15 01:29:53 ----- 该文件的堆栈结构从下往上进行分析 上面是对一个非常简单的问题的分析. 如果遇到比较复杂的问题还需要详细分析SYSTEM LOG. |
|
来自: 新用户8389DdzY > 《待分类》