在JBuilder9中,在編輯器中可以用紅點顯示當前行的代碼錯誤,但是並不能顯示在邏輯上的錯誤,以及運行的錯誤,所以還需要進一步了解如何進行錯誤檢查和調試,來排除邏輯以及運行時的錯誤。 首先,要進行斷點設置。方法非常簡單,在編輯器中的任意一行語句的前面單擊鼠標,將會自動將該行設置為斷點。上面的斷點只是最簡單的行斷點,其實斷點還有其他類型。斷點共有5種類型:
Line 在程序特定行的代碼被執行前被引發。
exception 在代碼拋出一個特定異常時被引發
class
method 在到達被設置成斷點的方法時被引發。
cross-process
不同的調試器支持不同的斷點。一些通用的類型是:行斷點 在程序特定行的代碼被執行前被引發。 方法斷點 在到達被設置成斷點的方法時被引發。 計數斷點 在某個計數器達到或超過某個特定值時被引發 異常斷點 在代碼拋出一個特定異常時被引發 儲存變化斷點 在存儲在特定地址范圍的內容被修改時引發 地址斷點 在被設置成斷點的地址達到時被引發注意: 一些調試器只在編譯版本的Java代碼 (使用just-in-time 編譯器生成的代碼) 上支持某些斷點類型而不支持解釋代碼(使用Javac 工具生成的代碼)。一個例子就是地址斷點。每個工具在你能設置斷點的方式上可能有些不同。檢查你的工具的文檔。
用戶還可以通過選擇Run菜單中的Debug ,用藍色顯示的是出錯的文件Project菜單項進入程序的調試界面。在調試和運行程序時,系統會將錯誤顯示出來(紅色部分的文字),其中名和程序行,單擊該部分,在編輯器中將會切入該文件,並以高亮顯示出錯的程序行。當用戶需要觀測對象的情況時,首先要添加觀測對象,方法是單擊Run菜單中的Add Watch菜單項,然後找到該對象的斷點,再運行Debug Project進入調試狀態。
你可能會問,我如何知道在哪兒放置斷點? 如果你對這個問題完全沒有感覺,你可以在main() 方法的開始設置斷點 如果你的代碼產生堆棧復寫(stack trace), 在程序產生它的地方設置斷點。你將在堆棧復寫裡面看到源代碼中出問題的行號。 如果你的輸出或者圖形顯示的特定部分沒有正確的顯示預定信息(例如文本域顯示錯誤的文本),你可以在該組件被創建的地方設置斷點。然後你可以單步執行你的程序顯示和GUI對象相關的值。經驗將在最合適的地方設置斷點。你在一個類或者程序裡面可以設置多個斷點。
在調試程序的時候經常遇到的術語有:進入 執行當前行。如果當前行包含一個方法調用,執行被調用方法的第一行。如果類中的方法是用不帶調試信息的選項編譯的 (也就是沒有使用 -g 選項), 你將看到No Source Available 消息。 越過 執行當前行而不會因為該行調用了一個方法或例程而停止。 返回 從當前執行點執行並立即返回到調用當前方法的行。
堆棧復寫(Stack traces)當Java 程序進行內核轉儲(core dumps)時它在控制台產生我們稱之為堆棧復寫(stack trace) 的東西。堆棧復寫告訴開發者程序發生問題的精確路徑。它將說明類和方法名以及源代碼中的行數 (如果你使用調試選項編譯)。如果你在發生堆棧復寫的開始處開始調試並停下,你可以向後查看你的代碼看看實際上是什麼申明被執行了。這是一個快速發現程序問題的辦法。你也可以使用下面的一個方法手動強制產生堆棧復寫。Throwable().printStackTrace() 在調用該方法的那個點產生堆棧復寫。復寫將顯示方法調用所涉及到的線程。 Thread.currentThread.dumpStack() 只產生當前線程的一個快照。當你需要理解在什麼條件下你的程序會產生堆棧復寫時使用強制復寫。下面的程序是一個強制堆棧復寫的例子。這個程序片斷進行文件拷貝。我們通過比較兩個文件的長度是否相等來判斷拷貝是否成功。如果不相等,我們向文件寫入復寫然後強制打印堆棧復寫(參看黑體的申明)。Throwable() 是Java.lang 中的一個類, printStackTrace() 是Throwable() 的一個方法,它打印程序執行路徑的復寫。
診斷方法Java 語言在Runtime() 類中提供方法跟蹤你對JVM的方法調用。這些跟蹤將產生你對JVM字節碼的每一個方法調用的列表。注意這個列表可以產生大量的輸出,所以在你的代碼的小部分裡面使用。打開跟蹤可以在代碼中加入下面的行:traceMethodCalls(true)關閉使用:traceMethodCalls(false)打開JVM 並觀察它向標准輸出的輸出。