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