Android Logcat 與除錯技巧
寫程式難免會遇到 Bug。當 App 崩潰 (Crash) 或行為不如預期時,Logcat 與 Debugger 是你最好的朋友。
什麼是 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 次時):
- 對紅點按右鍵。
- 在 Condition 欄位輸入條件,例如
i == 100。 - 點擊 Done。
現在,只有當 i 等於 100 時,程式才會暫停。
小結
- Logcat:用來查看執行過程的紀錄與崩潰原因。善用
Log.d與Log.e。 - Debugger:用來逐步執行程式,檢查變數狀態。是解決邏輯錯誤的神器。
掌握這兩項工具,你就能自信地處理開發過程中遇到的各種疑難雜症。