在最簡陋的開發環境下如何編寫調試一個hello world程式。
適用於對java文法一無所知的菜鳥程式員,或者只想寫代碼但對物件導向沒興趣的程式員
開發環境,只要你安裝了java sdk即可
原始碼hello.java:
public class hello{
public static void main(String[] args)
{
System.out.println("hello world"); }
}
編譯:
>javac hello.java
或者
>javac -g hello.java。
-g表示產生的目標檔案帶有偵錯符號(推薦,因為後面使用jdb調試代碼需要這些符號)。編譯出來的目標檔案為hello.class
運行:
>java -cp . hello
注意hello後面不需要帶.class尾碼名。
調試:
進入hello.class和hello.java所在目錄。
>jdb -classpath . hello
進入了jdb的互動的調試環境
在函數main中設定斷點:
>stop in hello.main
jdb顯示提示資訊:
Deferring breakpoint main.hello.
It will be set after the class is loaded.
上面的hello是類名,也就是hello.class中的hello,hello.java中的hello。main是函數名。如果在hello.java的第一行中有"package any_namespace;"語句,正確的類名就是any_namespace.main,那麼在jdb中設定斷點的語句為:
>stop in any_namespace.hello.main
設定完斷點後運行程式:
>run
可以看到jdb運行到斷點所在位置停了下來。設定斷點到類hello(在java中,類名和檔案名稱實際上是一個意思)第3行的語句為:
>stop at hello:3
顯示運算式的語句為print variable_name,顯示當前呼叫堆疊的語句為where,單步調試的語句為next或者step(我想next和step的區別不用我多羅嗦了),顯示當前代碼的語句為list。要看jdb的線上協助,輸入help(聊勝於無的協助而已)。
use命令為偵錯符號指定所對應的原始碼檔案的搜尋路徑,如果我們刪除hello.java,然後重新啟動jdb,設定斷點,運行hello,jdb會報告"Source file not found: hello.java",這時候輸入use,可以看到當前的原始碼搜尋路徑為".",如果將hello.java拷貝到父目錄,然後輸入命令"use .;..",告訴jdb不僅去目前的目錄搜尋hello.java,也要到父目錄搜尋hello.java,再輸入list命令,現在可以看到jdb正確地顯示了原始碼。