您的位置:首页 > 移动开发 > Android开发

android 使用开源工具ChkBugReport分析Bugreport

2013-12-16 12:49 441 查看
原文:http://www.androidlearner.net/using-chkbugreport-analysis-bugreport.html

一、ChkBugReport介绍

ChkBugReport是一个开源工具,它可以把你得到的bugreprot解析成适合阅读的html文件。导出的html文件包含了根据bugreport数据得出的图表和分析结论。

它的源码中用到了以下开源类库:jQuery,jsTreejQueryplugin,tabledndjQueryplugin,tablesorterjQueryplugin,js-hotkeys,jquery-cookie。学习输出报告文档型html可以参考源码。



目前ChkBugReport可以从bugreport数据中抽取出如下信息:

1、StacktracesChkBugReport可以从bugreport中解析出输出bugreport的最后时刻、导致ANR时刻甚至更多时刻的堆栈信息。在例子中你可以看到进程的优先级和策略都已标示出来,堆栈中耗时的部分颜色是黑红,一些违反Strict
Mode的部分(比如主线程中使用数据库)颜色标记为亮红。如果这个线程死锁,在报告的Errors将会出现。

2、Logs这部分是对system、main和kernel日志的分析,在这里你可以看到每个进程内存使用图、那个程序产生的log最多、Activity的启动耗时、数据库操作耗时统计、对象被锁定时间、AIDL调用时间、Activity和Service的生命周期及其在内存中使用频率等等,详见

3、PackagesChkBugReport解析bugreport中存储的packages.xml并展示一系列的packages、userids和permissions。参见

4、Processes操作app过程中产生的系统事件日志、内存使用信息等等,参见

5、Batterystatistics电池使用统计信息,参见

6、CPUFrequencystatisticsCPU频率统计信息,参见

7、Rawdata被分割成小段的原始数据

同时ChkBugReport也可以检测到(潜在的)错误,这些错误在输出的报告Errors部分中可以找到。你也可以在输出报告的stacktrace中找到死锁或一些违反StrictMode的行为。

二、ChkBugReport使用

使用很简单:

1
java
-jar$HOME/Downloads/chkbugreport.jar$HOME/tmp/bugreport.txt
你也可以把chkbugreport.jar加到path下,然后这样使用

1
chkbugreport
thebugreport.txt
该工具将根据你的bugreport数据输出一个分析结果目录bugreport_out。

你可以使用如下命令取得bugreport:

1
adb
shellbugreport>bugreport.txt
当然你可以使用ChkBugReport分析bugreport的部分数据比如/data/anr/traces.txt

1
chkbugreport
-sl:the_system_log.txt-sa:traces.txtdummy
这将输出分析结果到dummy_out。

你甚至可以使用ChkBugReport分析traceview生成的数据

1
chkbugreport
-tsomething.prof
Prof数据生成方法可以参考以下方法:

1、可以使用eclipse插件traceview生成

2、也可以按如下步骤:

a.用adbshellps列出所有进程并找出你想要trace的进程的PID

b.执行adbshellamprofilePIDstart/data/profile.dat,开始分析

c.操作你的app

d.执行adbshellamprofilePIDstop,停止分析

e.导出数据并清除临时文件:adbpull/data/profile.datadbshellrm/data/profile.dat

f.使用ChkBugReport进行分析chkbugreport-tprofile.dat

chkbugreport的常见参数如下:



chkbugreport常用参数

其他参数(较少使用):



chkbugreport不常用参数

三、相关参考

1、开源工具ChkBugReport介绍

2、ChkBugReport源码

3、ChkBugReport最新jar包下载电梯

4、使用ChkBugReport输出的报告例子

a.进程死锁的简单例子

b.两个进程相互调用对方的AIDL导致阻塞的死锁例子

c.这个例子结合了上面两例子(由于一进程调用AIDL阻塞造成另一线程死锁)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: