zoukankan      html  css  js  c++  java
  • BugReport 分析利器 ChkBugReport

    https://www.jianshu.com/p/9c4a8642ccbf

    本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

    一、ChkBugReport 概述
    二、ChkBugReport 获取方法
    三、ChkBugReport 使用方法
    四、ChkBugReport 使用详细说明

    一、ChkBugReport 概述

    ChkBugReport 工具的目的是分析处理手机上生成的bugreport,并且为开发者提取尽可能多的有用数据。

    ChkBugReport 解析 bugreport 后会生成一个bugreport_out文件。然后我们通过点击Bugreport 生成的解析索引 index.html既可以查看解析的内容。

     
    ChkBugReport 解析 bugreport 后会生成一个bugreport_out文件

     
    Bugreport 生成的解析索引

    二、ChkBugReport 获取方法

    1. github上源代码:

    git clone git://github.com/sonyxperiadev/ChkBugReport.git

    2. 预编译的二进制文件:

    注意:
    预编译的二进制文件可能比源代码更旧,因此要获取最新版本,请改用源代码。

    3. 源代码打包最新Jar 包方法

    源代码打包最新 chkbugreport-0.5-216.jar 包方法如下:

    // 下载 ChkBugReport  源码
    wangjie@wangjie:/wangjie/ChkBugReport$git clone git://github.com/sonyxperiadev/ChkBugReport.git
    ... ... //成功下载 ChkBugReport  源码
    wangjie@wangjie:/wangjie/ChkBugReport/ChkBugReport/core$ ./createjar.sh 
    // 如果 linux 服务器没有安装 ant ,请安装 sudo apt install ant
    Command 'ant' not found, but can be installed with:
    
    sudo apt install ant
    
    wangjie@wangjie:/wangjie/ChkBugReport/ChkBugReport/core$ sudo apt  install ant
    Reading package lists... Done
    Building dependency tree       
     
     ... ... 
     //成功安装 ant
    Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
    Setting up ant-optional (1.10.5-3~18.04) ...
    wangjie@wangjie:/wangjie/ChkBugReport/ChkBugReport/core$ ./createjar.sh 
    Buildfile: /wangjie/ChkBugReport/ChkBugReport/core/createjar.xml
    
    create_run_jar:
         [echo] Cleanup up the bin dir...
        [mkdir] Created dir: /wangjie/ChkBugReport/ChkBugReport/core/bin
     ... ...
         [echo] Done!
    //成功打包 最新版本的jar包
    BUILD SUCCESSFUL
    Total time: 3 seconds
    wangjie@wangjie:/wangjie/ChkBugReport/ChkBugReport/core$ ls
    bin  chkbugreport  chkbugreport-0.5-216.jar  ... ...
    
    

    三、ChkBugReport 使用方法

    ChkBugReport 没有安装程序,要安装它,您只需下载最新的chkbugreport-.jar(请参阅步骤二)或从源代码中自行*构建。注意:“ 代码/下载”部分已由GitHub删除。

    1.抓取Bugreport

    首先我们要有bugreport,抓取Bugreport的命令: adb bugreport bugreport.zip
    抓取bugreport 方法举例如下:

    
    C:UsersAdministratorChkBugReport1>adb bugreport bugreport.zip
    [  22%] generating bugreport.zip      
    data/user_de/0/com.android.shell/files/bugreports/bugreport-T5542-PKQ1.190601.001-2019-12-04-17-04-52.zip: 1 file pulled. 3.8 MB/s (1685410 bytes in 0.420s)                           
    C:UsersAdministratorChkBugReport1>
    
    

    2.解析Bugreport

    解析 Bugreport,首先我们将抓取的 bugreport.zip,解压抽取出 bugreport.txt,然后将chkbugreport.jar bugreport.txt 两个文件放在同一个文件夹下,然后执行java -jar chkbugreport.jar bugreport.txt

    解析bugreport 方法使用举例如下:

    
    C:UsersAdministratorChkBugReport1>dir
    ... ...
    
    2019/11/24  15:36        16,283,036 bugreport-T5542-PKQ1.190601.001-2019-11-24-15-34-17.txt
    2019/12/03  10:51         2,494,186 bugreport-T5542-PKQ1.190601.001-2019-11-24-15-34-17.zip
    2019/12/04  16:36           948,643 chkbugreport-0.5-216.jar
    ... ...
    
    C:UsersAdministratorChkBugReport1>java -jar chkbugreport-0.5-216.jar bugreport-T5542-PKQ1.190601.001-2019-11-24-15-34-17.txt
    
    ... ...
    
    Writing chapter: eventlog_10137.html...
    Writing chapter: eventlog_10128.html...
    Writing frameset...
    DONE!
    
    C:UsersAdministratorChkBugReport1>
    
    

    3.查看index.html

    解析完成后,我们点击解析文件夹中的index文件,进行查看分析。
    解析生成的主要包含:Errors 、Memory info、 System log、 kernel log、 Event log 、Battery info 、AlarmManager 、ActivityManager、 Process等

     
    通过浏览器查看 解析生成的index文件

    四、ChkBugReport 使用详细说明

    1.ChkBugReport 快速使用指南

    只需运行将bugreport作为参数传递的工具即可。

    我使用包装器脚本,将这两个脚本(包装器脚本“ chkbugreport ”和jar文件“ chkbugreport.jar”)复制到$ HOME / bin /,因此可以在计算机上的任何位置使用它:

    $ chkbugreport thebugreport.txt

    但是当然您也可以使用jar文件:

    $ java -jar path/to/chkbugreport.jar thebugreport.txt

    Bugreport 可以压缩(如.gz或zip文件形式)或纯文本文件。该工具将创建一个文件夹(带有输入文件名和后缀“ _out”后缀),并在该文件夹下创建所有文件(以及一些子文件夹)。您应该从该文件夹中打开“ index.html”文件(强烈建议使用Chrome或Firefox)。

    如果没有Bugreport ,请创建一个:

    $ adb bugreport > bugreport.txt

    同样,如果您只有一部分Bugreport (例如日志或堆栈跟踪),则仍然可以使用此工具。假设您有一个系统日志和一个包含进程堆栈跟踪的文件(例如,取自/data/anr/traces.txt),则可以使用如下工具:

    $ chkbugreport -sl:the_system_log.txt -sa:traces.txt dummy

    这将在名为“ dummy_out”的文件夹中生成输出(假定“ dummy”是不存在的Bugreport 的名称)。

    请注意,chkbugreport具有附加功能:它可以处理为traceview创建的概要分析数据。结果将类似:一个包含一堆html和图像文件的文件夹。要将其与跟踪文件一起使用,请在命令行上添加“ -t”选项:

    $ chkbugreport -t something.prof

    您可以像下面这样生成分析数据:

    • 使用“ adb shell ps”列出所有进程并找到要跟踪的进程的PID
    • 执行“ adb shell am profile PID start /data/profile.dat”以开始分析(将PID替换为进程ID号)
    • 做测试
    • 执行“ adb shell am profile PID停止”以停止分析(将PID替换为进程ID号)
    • 使用“ adb pull /data/profile.dat”拉出文件并将其从手机中删除(以节省宝贵的磁盘空间):“ adb shell rm /data/profile.dat”
    • 创建报告“ chkbugreport -t profile.dat”

    2. ChkBugReport 命令行参数说明

    要获取完整的参数列表,只需运行不带任何参数的工具即可。到目前为止,已处理以下参数:

    -ds:file-将文件用作dumsys输出(与-pb几乎相同)
    -el:file-使用文件作为事件日志
    -ft:file-将文件用作ftrace转储
    -ml:file-使用文件作为主日志
    -mo:file-解析猴子输出并从中提取堆栈跟踪
    -pb:file-加载部分Bugreport (例如dumpsys的输出)
    -pk:file-加载packages.xml文件
    -ps:file-将文件用作“进程”部分
    -pt:file-将文件用作“进程和线程”部分
    -sa:file-将文件用作“最后一个vm跟踪”部分
    -sl:file-使用文件作为系统日志
    -sn:file-将文件用作“刚才的vm跟踪”部分
    -sd:dir-从目录中加载文件作为部分Bugreport
    -uh:file-加载Usage-history.xml文件
    附加选项(较少使用):

    --browser-完成后启动浏览器
    --gui-如果未提供文件名,则启动图形用户界面
    --silent-抑制除致命错误以外的所有输出
    --limit-限制输入文件的大小(默认)(例如),如果使用-sl选项,则日志文件如果太长会被截断(因为生成的html会更大)。此选项(以及--no-limit)必须在其他选项之前才能生效。
    --no-limit-不限制输入文件的大小
    注意:图形用户界面仍处于试验阶段,非常基础。

    3.ChkBugReport 使用方法小tip

    通过简单地添加--browser参数,chkbugreport将尝试在默认浏览器中打开结果。您可以通过将openBrowser = true添加到〜/ .chkbugreport(如果需要,创建文件)来将其设置为默认行为。

    文件格式

    ChkBugReport尝试在文件格式方面尽可能地灵活:

    • 它应该支持任何行尾(甚至是疯狂的行尾,例如0x0d 0x0d)
    • 它应该处理压缩的Bugreport
    • 它应该处理压缩的Bugreport (它将扫描zip以查找第一个看起来像Bugreport 的文件)

    Android版

    请注意,Bugreport 的格式随每个Android版本而变化,因此某些版本可能不完全受支持。另外,内容(即保存哪些数据)因电话而异,因此可能会丢失某些信息。

    数据表格排序

    一些表支持排序:如果表前有这样的提示,则可以单击列以按字母顺序对数据进行排序。您可以按住Shift键对多列进行排序。

    其他一些表可能支持重新排序(表之前会有提示/注释),在这种情况下,您可以拖动行并将其上下移动。

    某些表格的数据也将导出为CSV(逗号分隔值)文件,在这种情况下,您可以在excel或Open Office中打开它们,并进行自己的统计/过滤/排序/等操作。

    如果ChkBugReport可以在类路径中找到sqlite jdbc驱动程序(例如sqlitejdbc-v056.jar),那么某些表的数据(以及一些其他数据,例如stacktraces)也将被导入到新创建的SQLite数据库中。

    分析日志

    您不需要完整的Bugreport 即可使用此工具。您可以从市场上下载记录器应用程序,该应用程序将持续将系统/主/事件日志保存在sdcard中。这样,您可以获取几个小时的使用情况数据。

    当您要处理日志时,请从sdcard中提取日志并执行:

    $ chkbugreport dummy --no-limit -sl:systemlog.txt -el:eventlog.txt

    • 所述参数只用于产生一个输出文件名
    • --no极限告诉chkbugreport不trunkate日志文件。缺省情况下,chkbugreport会中继大于1MB的日志文件,以避免生成过多的报告(或耗尽内存)。如果崩溃/异常位于日志末尾,有时这也是您想要的。但是,在这种情况下,我们要处理整个日志文件。
    • -sl:文件参数将加载系统/主日志。如果主日志位于单独的文件中,则可以使用-ml:file加载它
    • -el:文件参数将加载事件日志

    当然,由于缺少许多信息(例如,进程的名称),因此生成的报告将受到更大的限制,因此chkbugreport会尝试猜测它可以做什么。但是,即使仅从日志中也可以提取许多信息,例如电池使用情况



    作者:ProgramAndroid
    链接:https://www.jianshu.com/p/9c4a8642ccbf
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    <转>Npoi导入导出Excel操作<载>
    将DataTable导出为Excel C#
    错误 X “X1”不包含“XX2”的定义,并且找不到可接受类型为“X1”的第一个参数的扩展方法“XX2”(是否缺少 using 指令或程序集引用?)
    错误 1 未知的服务器标记“asp:ScriptManager”。
    分析器错误消息: 类型“test.test.testx”不明确: 它可能来自程序集“F: estProjectin est.test.DLL”或程序集“F: estProjectin estProject.DLL”。请在类型名称中显式指定程序集。
    There are no interfaces on which a capture can be done.
    基础知识系列☞GET和POST→及相关知识
    基础知识系列☞Abstract和Virtual→及相关知识
    同源策略
    26Mybatis_一级缓存及其测试
  • 原文地址:https://www.cnblogs.com/onelikeone/p/13434036.html
Copyright © 2011-2022 走看看