jdb 是一個簡單的命令行調試器,可以調試本地或遠程 Java Virtual Machine。
jdb [ options ] [ class ] [ arguments ] options 命令行參數 class 調試的類名稱 arguments main函數的參數
有兩種方式啟動調試,一個是新啟動一個 JVM 加載指定的類,然後在開始執行指令時停止;另一個是連接到一個正在運行的 JVM。具體方法如下。
(1) C:\> jdb MyClass (2) C:\> java -agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=n MyClass C:\> jdb -attach jdbconn
help, or ? 顯示幫助信息 run [class [args]] 執行 main 方法 threads 列出正在運行的線程 thread <thread id> 設置默認線程 where 轉儲線程堆棧 print 顯示Java對象(簡短描述)或原始數據類型值,若要顯示本地變量在編譯時需添加 -g 參數 print 支持簡單的Java表達式,如下: print MyClass.myStaticField print myObj.myInstanceField print i + j + k (i, j, k are primities and either fields or local variables) print myObj.myMethod() (if myMethod returns a non-null) print new java.lang.String("Hello").length() dump 原始類型打印值,對象打印每個字段(靜態和實例)的當前值,同print也支持表達式 locals 輸出當前棧幀本地變量 classes 列出當前已知的類 class <class id> 顯示類詳細信息 methods <class id> 列出類方法 fields <class id> 列出類字段 stop in <class id>.<method>[(argument_type,...)] 在方法中設置斷點 stop at <class id>:<line> 在某一行設置斷點 stop at MyClass:22 (在 MyClass 第22行設置斷點) stop in java.lang.String.length (在String.length方法設置斷點) stop in MyClass.<init> (MyClass 構造函數) stop in MyClass.<clinit> (MyClass 靜態塊初始化方法) clear <class id>.<method>[(argument_type,...)] 清除一個方法的斷點 clear <class id>:<line> 清除某一行斷點 clear 列出所有斷點 step 執行到下一行 next 執行當前棧幀下一行 cont 從斷點處繼續執行 exit 退出
# jdb 也識別許多java命令選項,如-D,-classpath,-X<option>(非標准 VM 選項) -help 顯示幫助信息 -sourcepath <dir1:dir2:...> 在指定路徑下搜索源文件,默認在當前目錄下 -connect <connector-name>:<name1>=<value1>,... 附帶參數連接到目標 JVM -tclient Java HotSpot™ VM (Client) -tserver Java HotSpot™ VM (Server) -Joption 將選項傳遞給JVM,以運行jdb,如-J-Xms48m 設置堆大小
更多信息,請參考:jdb