首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 命令列除錯利器:jdb 完整指南與實戰操作

     編輯:Java 綜合教學

Java 命令列除錯利器:jdb 完整指南與實戰操作

jdb(Java Debugger)是 JDK 內建的命令列除錯工具,支援本地與遠端 JVM 除錯。雖然現代 IDE 提供圖形化除錯介面,但掌握 jdb 能在無圖形介面的伺服器環境中快速定位問題,是 Java 開發者的必備技能。

1. 啟動除錯會話的兩種方式

方式一:直接啟動新 JVM 並掛載主類別

jdb MyClass

JVM 會啟動並載入 MyClass,在執行第一條指令前暫停,等待除錯指令。

方式二:連接至已執行的 JVM(遠端除錯)

先以除錯模式啟動應用程式:

java -agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=n MyClass

再使用 jdb 連接:

jdb -attach jdbconn

此模式適合生產環境或容器化部署的遠端除錯。

2. jdb 核心操作指令速查表

指令說明
help / ?顯示所有可用指令
run [class [args]]執行主類別的 main 方法
threads列出所有執行緒
thread <thread id>切換預設執行緒
where印出當前執行緒堆疊追蹤
print <expr>評估並印出運算式值(支援欄位、區域變數、方法呼叫)
dump <expr>印出物件所有欄位值
locals印出當前堆疊框架的所有區域變數(需編譯時加 -g)
classes列出已載入的類別
class <class id>顯示類別詳細資訊
methods <class id>列出類別方法
fields <class id>列出類別欄位
stop in <class>.<method>[(args)]在方法進入點設中斷點
stop at <class>:<line>在指定行號設中斷點
clear <class>.<method> / clear <class>:<line>清除中斷點
step單步執行(進入方法)
next單步執行(不進入方法)
cont從中斷點繼續執行
exit結束除錯會話

3. 常用命令列選項

  • -sourcepath <dir1:dir2...>:指定原始碼搜尋路徑(預設為當前目錄)
  • -connect <connector>:<name>=<value>,...:以連接器參數連接目標 JVM
  • -tclient / -tserver:指定 Client/Server VM 模式
  • -J<option>:傳遞參數給執行 jdb 的 JVM(如 -J-Xms48m 設定堆大小)

4. 實戰範例:除錯 Hello World

// HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        String msg = "Hello, jdb!";
        System.out.println(msg);
    }
}
  1. 編譯並保留除錯資訊:javac -g HelloWorld.java
  2. 啟動 jdb:jdb HelloWorld
  3. 設中斷點:stop at HelloWorld:4
  4. 執行:run
  5. 檢視變數:print msg
  6. 繼續執行:cont

更多進階用法請參考官方文件:jdb - Java Debugger

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved