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