Android-Crash日誌抓取

laity0828發表於2019-08-04

Crash簡介

crash,即崩潰,anr是crash的一種。在程式中可能會出現你未捕獲到的異常,這就造成了崩潰。

常見導致Crash的異常

  • NullPointerException 空指標
  • ClassCastException 型別轉換異常
  • IndexOutOfBoundsException 下標越界異常
  • ActivityNotFoundException Activity未找到異常
  • IllegalStateException 非法狀態異常
  • ArrayIndexOutOfBoundsException 陣列越界異常
  • SecurityException 安全異常

抓取Android APP崩潰和無響應日誌

在Android APP的測試過程中經常遇到crash和anr,開發人員習慣通過eclipse或者eclipse的ddms元件進行捕抓日誌,測試人員常通過在dos視窗下adb命令的方式來抓取日誌。前者的缺點是啟動時非常耗時,後者呢則每次都要寫命令也比較麻煩(需要截圖時也存在這個問題)。

針對這樣的情況,下面分享一個通過adb程式與bat命令組合的技巧來抓取日誌,只要3~5秒即可獲取崩潰日誌,非常快捷。

一、 準備工作

1.1 安裝JDK和ADB(V1.0.31版本或以上),網上很多指導方法可以參考。

1.2 在PATH環境變數中新增ADB路徑。這樣就能在任意地方呼叫ADB命令,如adb.exe的位置在c:\adb\adb.exe,則在path中加入c:\adb。

二、 製作捕獲日誌的批命令

2.1 製作捕獲crash異常的批命令
將以下命令複製,製作成logcat.bat檔案。logcat.bat可以放置任意位置。

@ECHO OFF
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
SET timeStamp=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%
SET mutID=_mut
@ECHO ON
adb logcat -v time > .\"%mutID%_%timeStamp%_logcat.log"
pause
複製程式碼

原理: 該工具的原理是bat檔案呼叫adb工具,將手機執行日誌拉到本地,並將實時日誌也記錄到本地。

用法: 當手機需要重現crash、或者x分鐘內已經發生過crash(x≈15~30),點選此bat,logcat命令會將手機的logcat日誌拉下來並實時記錄,直到你關閉cmd視窗。然後在拉下來的txt中尋找fatal字眼,附近上下文即為crash日誌。

2.2 製作捕獲ANR異常的批命令

anr:Application Not Responding -- 程式無響應。

將以下命令複製,製作成“ANR捕獲.bat”檔案。“ANR捕獲.bat”可以放置任意位置。

@ECHO OFF
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
SET timeStamp=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%
SET mutID=_mut
@ECHO ON
adb pull data/anr/traces.txt traces_%timeStamp%.txt
複製程式碼

原理: 同上,將手機的traces.txt拉到本地。手機發生anr之後可以用,但一般用不上。

2.3 優點與限制

手機無需root;
無需eclipse支援;
方便儲存、查詢日誌;
實時日誌不能在cmd視窗回顯(限制)

三、演示

以抓取crash異常為例:

步驟1:將android手機連線電腦,開啟開發者模式並允許usb除錯;
步驟2:執行logcat.bat檔案,會出現cmd視窗;
步驟3:①如果手機程式已經發生過crash,5秒後關閉cmd視窗;②如果是想重現crash,則在手機端重現後即可關閉cmd視窗;
步驟4:在logcat.bat的同級目錄下會生成一份log檔案,從檔案中搜查FATAL關鍵字,便可找到崩潰程式碼。

說明: bat是dos下的批處理檔案。批處理檔案是無格式的文字檔案,它包含一條或多條命令。它的副檔名為 .bat 或 .cmd。在命令提示下鍵入批處理檔案的名稱,或者雙擊該批處理檔案,系統就會呼叫Cmd.exe按照該檔案中各個命令出現的順序來逐個執行它們。直接右鍵-新建-文字(.txt檔案) 右鍵重名名 改字尾為 .bat直接點選執行,或者 在cmd下執行。

shell指令碼和批處理,通常是Linux和Windows下進行一些簡單指令碼執行任務的途徑。shell指令碼是Linux、unix和Mac等下,批處理是Windows下。因此上述的bat檔案只可在Windows上執行,如需在mac上執行,需使用shell指令碼語言。