擷取及讀取錯誤報告

錯誤報告包含裝置記錄、堆疊追蹤和其他診斷資訊,可協助找出並修正應用程式中的錯誤。如要從裝置擷取錯誤報告,您可以使用裝置的「取得錯誤報告」開發人員選項、Android Emulator 選單,或者開發機器的 adb bugreport 指令。

圖 1 裝置上的開發人員選項。

如要擷取錯誤報告,您必須先在裝置上啟用開發人員選項,才能使用「取得錯誤報告」選項。

擷取裝置的錯誤報告

圖 2. 錯誤報告已備妥。

如要直接從裝置擷取錯誤報告,請按照下列步驟操作:

  1. 啟用開發人員選項
  2. 在「Developer options」中,輕觸「Take bug report」
  3. 選取想要的錯誤報告類型,然後輕觸「Report」

    稍後您會收到錯誤報告已備妥的通知,如圖 2 所示。

  4. 如要分享錯誤報告,請輕觸通知。

透過 Android Emulator 擷取錯誤報告

在 Android Emulator 中,您可以使用擴充控制項中的回報錯誤功能:

  1. 按一下 Emulator 面板中的「More」圖示
  2. 在「Extended controls」視窗中,選取「Bug Report」

    您可以在開啟的畫面中查看錯誤報告詳細資料,例如螢幕截圖、AVD 設定資訊和錯誤報告記錄。此外,也可以輸入含有重現步驟的訊息,一併儲存在報表中。

  3. 等待錯誤報告收集完成,然後按一下「Save Report」

使用 ADB 擷取錯誤報告

如果僅連結一部裝置,可以使用 adb 取得錯誤報告,如下所示:

$ adb bugreport E:\Reports\MyBugReports

若您未指定錯誤報告的路徑,該報告會儲存在本機目錄中。

如果連結多部裝置,就必須使用 -s 選項指定裝置。接著執行下列 adb 指令,取得裝置序號並產生錯誤報告:

$ adb devices
List of devices attached
emulator-5554      device
8XV7N15C31003476 device

$ adb -s 8XV7N15C31003476 bugreport

儲存先前的錯誤報告

錯誤報告的預設儲存位置為 /bugreports,您可以使用下列指令查看報告:

$ adb shell ls /bugreports/
bugreport-foo-bar.xxx.YYYY-MM-DD-HH-MM-SS-dumpstate_log-yyy.txt
bugreport-foo-bar.xxx.YYYY-MM-DD-HH-MM-SS.zip
dumpstate-stats.txt

接下來可透過 adb pull 提取 ZIP 檔案:

$ adb pull /bugreports/bugreport-foo-bar.xxx.YYYY-MM-DD-HH-MM-SS.zip

檢查錯誤報告 ZIP 檔案

ZIP 檔案會預設命名為 bugreport-BUILD_ID-DATE.zip,可包含多個檔案,但最重要的檔案是 bugreport-BUILD_ID-DATE.txt。這個檔案即為錯誤報告,內含系統服務的診斷輸出內容 (dumpsys)、錯誤記錄 (dumpstate) 和系統訊息記錄 (logcat)。系統訊息包括裝置擲回錯誤時的堆疊追蹤,以及所有使用 Log 類別的應用程式寫入的訊息。

ZIP 檔案包含 version.txt 中繼資料檔案,內含 Android 版本字母。當 systrace 啟用時,ZIP 檔案也會包含 systrace.txt 檔案。Systrace 工具可擷取並顯示應用程式作業程序和其他 Android 系統作業程序的執行時間,協助分析應用程式效能。

dumpstate 工具會將裝置檔案系統中的檔案複製到 FS 資料夾下的 ZIP 檔案,方便您參照。舉例來說,裝置中的 /dirA/dirB/fileC 檔案會在 ZIP 檔案內產生 FS/dirA/dirB/fileC 項目。

圖 3. 錯誤報告檔案結構。

詳情請參閱「讀取錯誤報告」。

取得使用者回報的資訊

當您本人使用應用程式時,擷取錯誤報告是很實用的做法,但對您的使用者而言,與您分享這類錯誤報告並不容易。如要向實際使用者接收內含堆疊追蹤的錯誤報告,請善用 Google Play 和 Firebase 的當機回報功能。

Google Play 管理中心

您可以在 Google Play 管理中心取得報告,針對從 Google Play 安裝您應用程式的使用者,查看他們回報的當機和應用程式無回應 (ANR) 錯誤資料。系統提供過去六個月內的資料。

如需更多資訊,請前往 Play 管理中心的說明中心,參閱「查看當機與應用程式無回應 (ANR) 錯誤的資料」一文。

Firebase 當機回報

Firebase Crashlytics 回報功能會針對應用程式中的錯誤建立詳細報告。各項錯誤會根據類似的堆疊追蹤區分成不同問題,並依照對使用者的影響嚴重性來分類。除了自動產生的報告外,您也可以記錄自訂事件,這些資訊有助於找出造成當機的過程。

只要在 build.gradle 檔案中新增 Firebase 依附元件,即可開始接收所有使用者的當機報告。詳情請參閱「Firebase Crashlytics」。