Android除錯工具

錯誤種類

在程式開發當中,一定會遇到許多錯誤,這些錯誤又稱為程式 bug,這些錯誤 也許造成程式無法被執行,也許執行到一半程式突然因為失敗而關閉了(也就 是現在常見的閃退問題),也可能是程式執行順利,但是結果卻不正確,這些 錯誤,一般可以分為三類:
  1. 語法錯誤: 這個錯誤是最容易解決的,當你撰寫了錯誤的程式碼,例如:參數類型錯誤、 程式碼格式錯誤、拼字錯誤等等,這個錯誤將造成程式無法被編譯及執行, 編輯器會告訴我們錯誤的原因及位置,因此我們可以很容易的即刻修正它。
  2. 執行錯誤: 這個錯誤會在程式執行到一半時,突然就因為錯誤而關閉了(也就是閃 退),在 Java 裡的術語稱為程式產生例外而中斷了執行,我們通常可以根 據 Android Studio 內的 Android Monitor 視窗觀察 logcat 訊息,來得知發生 了什麼例外,在哪裡發生例外之後,分析例外發生的原因來解決錯誤。
  3. 邏輯錯誤: 這個錯誤通常是最棘手的,因為程式執行起來正常且沒有問題,但是結果卻不 正確,因此,我們需要自行判斷程式可能有問題的地方,並透過一些工具及方 法來分析有可能出現問題的程式碼,直到找出造成錯誤的程式碼為止。

除錯方式

要解決上一節提到的三種程式錯誤類型,需要靠經驗的累積以及適當的除錯方法;經驗累積需要靠時間以及努力,方法則大致有以下四種:
  1. 編輯器錯誤訊息:

    當出現程式語法錯誤時,Android Studio 將以紅色字體來表示,並且在右方 捲軸上用一紅色橫線標示錯誤的位置,當你跳到錯誤的位置,將滑鼠移到錯 誤的程式碼上面,編輯器還會跳出錯誤的說明,讓你知道錯誤的原因,我們 就可以根據該訊息來修正錯誤。

    編輯器錯誤訊息

  2. Android Monitor 視窗訊息:

    Android Monitor 視窗內包含許多功能,而可以用來除錯的為 logcat 標籤下 的視窗,logcat 是 Android 系統提供的一個功能,可以用來在應用程式執行 時丟出有用的資訊,再透過 logcat 來觀看該資訊,這些資訊在一般使用者手 機上,是完全看不到的,只有在開發模式下,透過 logcat 才能取得,主要用 在程式開發時的除錯。

    當程式因為執行錯誤產生例外而造成閃退時,也可以從這裡取得訊息,來得 知發生什麼例外事件以及產生例外的原因。

    編輯器錯誤訊息

  3. Log 類別:

    要將訊息丟出到 logcat 視窗,Android 開發套件提供了一個類別 Log,該類別提供了幾個靜態方法,非常容易使用,應用程式可以透過呼叫這幾個靜態 方法,來將程式執行時產生的資訊透過 logcat 來顯示。

    Log.v(String tag, String message) Verbose 訊息,通常用來顯示詳細訊息。
    Log.d(String tag, String message) Debug 訊息。
    Log.i(String tag, String message) INFO 一般訊息。
    Log.w(String tag, String message) Warning 警告訊息。
    Log.e(String tag, String message) Error 錯誤訊息。

  4. 除錯器:

    Android Studio 並提供了可以用來追蹤程式碼的除錯工具,你可以用它來對 程式碼做單步追蹤、即時觀看變數值等等。

    首先,可以在你打算開始追蹤的程式碼處使用滑鼠左鍵,在程式碼左方灰色地 區點一下,會出現一粉紅色的圓點,該原點稱為中斷點,程式只要進入除錯模 式執行後就會停在第一個中斷點。

    中斷點

    設定好中斷點後,可以在 Run 選單內選擇 Debug 'app' 來進入除錯模式。

    進入除錯模式

    當進入除錯模式後,程式執行到第一個中斷點會停止執行,我們可以把想追蹤的變數,直接拖放到右下角的 Watches 視窗,便可以隨時知道該變數的內容。

    編輯器錯誤訊息

    當進入除錯模式後,在 Run 選單裡的中間部分原本為灰色不可使用的選項就會 變成可用,下面介紹幾個常用的選項:
    • Step Over:執行程式到下一行,如果下一行有呼叫方法的話,會直接執行 完整個方法。
    • Step Into:執行程式到下一行,如果下一行有呼叫方法的話,會跳進該方法 的第一行後停止執行。
    • Step Out:直接執行完目前整個方法的程式碼 並跳出。
    • Run to Cursor:執行到目前游標所在的程式碼。
    • Resume Program:恢復執行程式碼。


學會善用本節介紹的幾個除錯方法,便可以找出程式開發過程當中出現的錯誤,讓我們在開發 App 時更加事半功倍。