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:\Users\Administrator\ChkBugReport\1>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:\Users\Administrator\ChkBugReport\1> 

2.解析Bugreport

解析 Bugreport,首先我們將抓取的 bugreport.zip,解壓抽取出 bugreport.txt,然后將chkbugreport.jar bugreport.txt 兩個文件放在同一個文件夾下,然后執行java -jar chkbugreport.jar bugreport.txt

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


C:\Users\Administrator\ChkBugReport\1>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:\Users\Administrator\ChkBugReport\1>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:\Users\Administrator\ChkBugReport\1> 

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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM