Android Logcat 與除錯技巧

寫程式難免會遇到 Bug。當 App 崩潰 (Crash) 或行為不如預期時,LogcatDebugger 是你最好的朋友。

什麼是 Logcat?

Logcat 是 Android 的日誌系統,紀錄了系統與應用程式的輸出訊息。當 App 發生錯誤 (Exception) 時,錯誤堆疊 (Stack Trace) 會完整顯示在 Logcat 中。

使用 Log 類別

在程式碼中,我們使用 android.util.Log 類別來輸出日誌:

import android.util.Log

val TAG = "MyTag"

fun someFunction() {
    Log.v(TAG, "Verbose: 最詳細的瑣碎訊息")
    Log.d(TAG, "Debug: 除錯用的訊息")
    Log.i(TAG, "Info: 一般資訊")
    Log.w(TAG, "Warning: 警告,可能潛在的問題")
    Log.e(TAG, "Error: 錯誤!發生了嚴重問題")
    Log.wtf(TAG, "Assert: 絕不該發生的致命錯誤 (What a Terrible Failure)")
}
  • TAG:通常使用類別名稱,用來過濾日誌。建議在 companion object 中定義。

在 Android Studio 中檢視 Logcat

點擊 Android Studio底部的 Logcat 標籤頁。

新版 Logcat (Dolphin+) 提供了強大的過濾功能:

  • package:mine:只顯示當前 App 的日誌(最常用)。
  • level:error:只顯示 Error 層級以上的日誌(找 Crash 時用)。
  • tag:MyTag:只顯示特定 Tag 的日誌。
  • message:"something":搜尋訊息內容。
當 App 崩潰時,Logcat 通常會顯示一大片紅字。請往上捲動,找到 "FATAL EXCEPTION" 開頭的那一行,那是崩潰的起點。接著尋找 "Caused by..." 以及包含你 package name 的藍色連結,點擊它就能直接跳到出錯的程式碼行數。

使用 Debugger (除錯器)

Log 可以告訴你「發生了什麼」,而 Debugger 可以讓你「暫停時間」,查看變數當下的值,並一行行執行程式。

設定斷點 (Breakpoints)

在程式碼編輯器左側的行號旁邊點擊一下,會出現一個紅點,這就是斷點。當程式執行到這一行時,會暫停下來。

啟動除錯模式

點擊工具列上的 Debug 按鈕 (綠色小蟲圖示),而不是一般的 Run。

除錯面板操作

當程式暫停在斷點時,Debug 面板會自動跳出:

  • Variables:查看當前範圍內所有變數的值。你可以展開物件查看屬性。
  • Watches:手動加入你想監控的變數或表達式。
  • Frames:查看目前的呼叫堆疊 (Call Stack),知道是誰呼叫了這個函式。

控制執行流程

  • Step Over (F8):執行下一行。如果該行是函式呼叫,會直接執行完該函式,停在下一行。
  • Step Into (F7):進入函式內部。如果該行是函式呼叫,會跳進該函式的第一行。
  • Step Out (Shift + F8):執行完當前函式剩餘的部分,返回呼叫者。
  • Resume Program (F9):繼續執行程式,直到遇到下一個斷點。

條件斷點 (Conditional Breakpoints)

如果你不想每次都停下來,只想在特定情況下暫停(例如迴圈執行到底 100 次時):

  1. 對紅點按右鍵。
  2. 在 Condition 欄位輸入條件,例如 i == 100
  3. 點擊 Done。

現在,只有當 i 等於 100 時,程式才會暫停。

小結

  • Logcat:用來查看執行過程的紀錄與崩潰原因。善用 Log.dLog.e
  • Debugger:用來逐步執行程式,檢查變數狀態。是解決邏輯錯誤的神器。

掌握這兩項工具,你就能自信地處理開發過程中遇到的各種疑難雜症。