
- JDB 教程
- JDB - 首頁
- JDB - 簡介
- JDB - 安裝
- JDB - 語法
- JDB - 選項
- JDB - 會話
- JDB - 基本命令
- JDB - 斷點
- JDB - 單步除錯
- JDB - 異常
- JDB - 在 Eclipse 中使用
- JDB 有用資源
- JDB - 快速指南
- JDB - 有用資源
- JDB - 討論
JDB - 單步除錯
本章解釋如何使用單步除錯的概念來除錯程式。單步除錯是偵錯程式的功能,允許您逐行執行程式碼。使用此功能,您可以檢查每一行程式碼以確保其按預期執行。
單步除錯過程中使用以下命令:
- step:單步執行到下一行。
- list:檢視當前程式碼位置。
- cont:繼續執行剩餘程式碼。
示例
以下示例使用我們在上一章中使用的 Add 類。
public class Add { public int addition( int x, int y) { int z = x + y; return z; } public static void main( String ar[ ] ) { int a = 5, b = 6; Add ob = new Add(); int c = ob.addition(a,b); System.out.println("Add: " + c); } }
將以上檔案儲存為 Add.java。使用以下命令編譯此檔案:
\>javac Add.java
假設在 Add 類的 main() 方法上設定了斷點。以下步驟展示如何在 Add 類中應用單步除錯。
步驟 1:執行作業
以下命令開始執行名為 Add 的類。
> run Add
執行此命令後,您將看到以下輸出。在此輸出中,您可以發現執行在斷點位置(即 main() 方法)停止。

執行停在 main 方法的第一行,“int a=5, b=6;” 或程式碼中的第 11 行。您可以在輸出中觀察到此資訊。
步驟 2:單步執行程式碼
以下命令將執行單步執行到下一行。
main[1] step
現在執行單步執行到第 12 行。您將看到以下輸出。

步驟 3:列出程式碼
以下命令列出程式碼:
main[1] list
您將得到以下輸出。list 命令用於讓您知道程式控制已到達的程式碼行。請注意以下螢幕截圖中的箭頭標記 =>,它顯示了程式控制的當前位置。

步驟 4:繼續執行
以下命令繼續執行程式碼:
main[1] cont
此命令繼續執行程式碼的剩餘行。輸出如下所示:
> Add:11 The application exited \>
通常,有三種類型的單步除錯:
- Step Into(步入)
- Step Over(步過)
- Step Out(步出)
Step Into(步入)
使用此命令,您可以單步執行到程式碼的下一行。如果下一行程式碼是函式呼叫,則它透過將控制驅動到函式的頂行來進入該函式。
在以下程式碼中,箭頭標記定義了程式碼中的控制器。
public class Add { public int addition( int x, int y) { int z = x + y; return z; } public static void main( String ar[ ] ) { int a = 5, b = 6; -> Add ob = new Add(); int c = ob.addition(a,b); System.out.println("Add: " + c); } }
如果您使用 **Step Into** 命令,控制器將移動到下一行,即“int c = ob.addition(a,b);”。在這行中,有一個函式呼叫 **addition(int, int)**,因此控制器將移動到 addition 函式的最頂行,箭頭標記如下所示:
public class Add { public int addition( int x, int y) -> { int z = x + y; return z; } public static void main( String ar[ ] ) { int a = 5, b = 6; Add ob = new Add(); int c = ob.addition(a,b); System.out.println("Add: " + c); } }
Step Over(步過)
Step Over 也執行下一行。但是,如果下一行是函式呼叫,它會在後臺執行該函式並返回結果。
讓我們舉個例子。在以下程式碼中,箭頭標記定義了程式碼中的控制。
public class Add { public int addition( int x, int y) { int z = x + y; return z; } public static void main( String ar[ ] ) { int a = 5, b = 6; -> Add ob = new Add(); int c = ob.addition(a,b); System.out.println("Add: " + c); } }
如果您使用 **Step Over** 命令,控制器將移動到下一行,即“int c = ob.addition(a,b);”。在這行中,有一個函式呼叫 **addition(int, int)**,因此函式執行在後臺完成,結果將帶有箭頭標記返回到當前行,如下所示:
public class Add { public int addition( int x, int y) { int z = x + y; return z; } public static void main( String ar[ ] ) { int a = 5, b = 6; Add ob = new Add(); -> int c = ob.addition(a,b); System.out.println("Add: " + c); } }
Step Out(步出)
Step Out 執行下一行。如果下一行是函式呼叫,它會跳過該呼叫,並且函式執行將繼續執行程式碼的剩餘行。
讓我們舉個例子。在以下程式碼中,箭頭標記定義了程式碼中的控制器。
public class Add { public int addition( int x, int y) { int z = x + y; return z; } public static void main( String ar[ ] ) { int a = 5, b = 6; -> Add ob = new Add(); int c = ob.addition(a,b); System.out.println("Add: " + c); } }
如果您使用 **Step Out** 命令,控制器將移動到下一行,即“int c = ob.addition(a,b);”。在這行中,有一個函式呼叫 **addition(int, int)**,因此函式執行將被跳過,並且剩餘的執行將繼續,箭頭標記如下所示:
public class Add { public int addition( int x, int y) { int z = x + y; return z; } public static void main( String ar[ ] ) { int a = 5, b = 6; Add ob = new Add(); -> int c = ob.addition(a,b); System.out.println("Add: " + c); } }