天天看點

jdb調試程式

1) jdb調試正在運作的程序:

先使用jps先确定程序号,然後讓jdb連接配接上目标程序(23549換成實際的程序号):

jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=23549

接着,可以使用thread N切換線程(使用threads指令可以檢視有哪些線程),如:thread 1,然後就可以使用where指令檢視調用棧了(jdb中的where相當于gdb的bt)。

2) jdb調試未運作的程式:

程式代碼:

hadoop@hadoop-137-143:~/hbase> cat Hello.java

public class Hello {

    public static void main(String[] args) {

        System.out.println("Hello World!");

    }

}

編譯:

hadoop@hadoop-137-143:~/hbase> javac Hello.java  

運作:

hadoop@hadoop-137-143:~/hbase> java Hello

Error: Could not find or load main class Hello

運作報錯,設定CLASSPATH後再運作:

hadoop@hadoop-137-143:~/hbase> export CLASSPATH=.

Hello World!

運作成功了,如果不想設定CLASSPATH,下面這樣也可以運作成功:

hadoop@hadoop-137-143:~/hbase> java -classpath . Hello

也就是利用參數“-classpath”達到同樣的效果。

開始調試,執行下面指令進入jdb:

jdb -classpath . Hello

設定斷點在main()函數:

> stop in Hello.main

Deferring breakpoint Hello.main.

It will be set after the class is loaded.

運作到斷點:

> run

run Hello

運作下一步:

main[1] next

> Hello World!

退出:

main[1] quit