|
調試是檢查應用程序是否存在錯誤的過程。您可以使用以下方法進行調試:在代碼中設置斷點和監(jiān)視,然后在調試器中運行代碼。您還可以通過逐行執(zhí)行代碼并檢查應用程序狀態(tài)來查找任何問題。
IDE 使用 Sun Microsystems JPDA 調試器來調試程序。在啟動調試會話時,所有相關的調試器窗口都將自動出現(xiàn)在屏幕的底部。您可以調試整個項目、任何可執(zhí)行類以及任何 JUnit 測試。IDE 還允許您通過將調試器連接到應用程序進程來調試在遠程計算機上運行的應用程序。 運行或調試 Web 應用程序、JSP 頁或 Servlet 時,您可以使用 HTTP 監(jiān)視器來監(jiān)視數(shù)據(jù)流。缺省情況下,將出現(xiàn) HTTP 監(jiān)視器,該監(jiān)視器收集有關 Servlet 引擎處理的 HTTP 請求的數(shù)據(jù)。對于引擎處理的每個 HTTP 請求,監(jiān)視器都會記錄關于傳入請求的數(shù)據(jù)、保留在服務器上的數(shù)據(jù)狀態(tài)和 Servlet 上下文。您可以查看數(shù)據(jù)、為將來的會話存儲數(shù)據(jù)、重新顯示和編輯以前的請求。有關 HTTP 監(jiān)視器的詳細信息,請在主菜單中選擇“幫助”>“幫助內容”。 對于自由格式項目,您必須為“調試項目”命令編寫一個 Ant 目標。您還可以編寫用于調試特定文件的目標,并將這些目標映射到項目的命令。 基本調試在此部分,我們將使用一個簡單的示例來說明如何啟動調試會話、如何以手動方式逐步執(zhí)行代碼以及如何監(jiān)視變量和方法調用。我們將在后面的部分介紹更高級的功能,如設置斷點和監(jiān)視。 此部分的示例是 Array Fill 應用程序。此應用程序非常簡單。它將創(chuàng)建一個 sampleBeans 數(shù)組,每個 Bean 包含兩個屬性:firstName 和 lastName。然后,它將為每個 Bean 的屬性賦值并輸出這些值。 首先需要運行該應用程序以確定它是否會拋出任何異常。下載并提取 ArrayFill 示例的 .zip 歸檔文件 (。要在 IDE 中打開 ArrayFill 項目,請按 CTRL-Shift-O 組合鍵找到提取的 ArrayFill 文件夾,然后單擊“打開項目文件夾”。將在 IDE 中打開 ArrayFill 項目,并可在“項目”窗口中看到該項目的邏輯結構。http://www./files/documents/4/446/ArrayFill.zip) 在“項目”窗口中,展開“源包”下的 arrayfill 包。arrayfill 包包含兩個類:ArrayFill 和 SampleBean。右鍵單擊 ArrayFill.java,然后按 Shift-F6 組合鍵執(zhí)行它。在“輸出”窗口中出現(xiàn)的輸出應該與如下所示類似: java.lang.NullPointerException 啟動調試會話在 IDE 中啟動調試會話時,IDE 將編譯所調試的文件,在調試模式下運行它們,并在調試器窗口中顯示調試器輸出。要啟動調試會話,請選擇要調試的文件,然后從“運行”菜單中選擇以下某個命令:
如果在 IDE 中打開了多個項目,請確保使用以下方法將 Array Fill 設置為主項目:在“項目”窗口中右鍵單擊 ArrayFill 節(jié)點,然后從上下文菜單中選擇“設置主項目”。按 F7 鍵步入主項目的主類。如果未設置項目的主類,則 IDE 將提示您設置它。然后,IDE 將在源代碼編輯器中打開文件,顯示“輸出”窗口和調試器窗口,并剛好在 main 方法內部停止。 調試器窗口讓我們簡單了解一下調試器窗口。調試器窗口在每次啟動調試會話時自動打開,并在完成會話時自動關閉。缺省情況下,IDE 將打開三個調試器窗口:“局部變量”窗口、“監(jiān)視”窗口和“調用棧”窗口。 ![]() 通過從“窗 口”>“調試”菜單中進行選擇,可以打開其他調試器窗口。如果在調試會話過程中打開了調試器窗口,該窗口將在您完成會話后自動關閉。如果在未啟動調 試會話的情況下打開調試器窗口,該窗口將一直保持打開狀態(tài),直到您手動關閉它。您可以通過將調試器窗口拖動到所需位置來對其進行排列。
逐步執(zhí)行代碼可以使用“運行”菜單中的以下命令來控制代碼在調試器中的執(zhí)行方式:
在本示例中,使用 F7 鍵按一次一行的方式逐步執(zhí)行代碼。loadNames 調用中出現(xiàn) NullPointerException,因此在步入該調用時,將在“局部變量”視圖中監(jiān)視 names 數(shù)組的值。每個 Bean 都包含一個 null 值。可以繼續(xù)逐步執(zhí)行 loadNames 方法 - names Bean 始終為 null。 ![]() SampleBean[] myNames=new SampleBean[fnames.length]; 啟動包含這些 Bean 的數(shù)組時,它不會實例化 Bean 自身。必須添加以下代碼,在 loadNames 方法中實例化各個 Bean:
使其位于 loadNames 方法中的行 names.setLastName(lnames); 之前。 使用斷點大多數(shù)應用程序都太大,從而無法逐行進行檢查。通常,在您認為會出現(xiàn)問題的位置設置一個斷點,然后將應用程序運行到該位置。您還可以設置更為專用的斷點(如僅當指定條件為 true 時停止執(zhí)行的條件斷點)或適用于某些線程或方法的斷點。 在此節(jié)中,我們將使用上一個示例中的 ArrayFill 類,因此必須將上面添加的代碼注釋掉以便重現(xiàn)錯誤。 設置斷點如果僅希望設置簡單的行斷點,則可以單擊所需行的左旁注處。在旁注中將會出現(xiàn)行斷點圖標 ( ![]() 對于更復雜的斷點,請使用“運行”菜單中的“新建斷點”(Ctrl-Shift-F8) 命令。“新建斷點”對話框將使您能夠選擇要創(chuàng)建的斷點類型并設置斷點選項,如中斷條件或斷點輸出到“輸出”窗口的信息。 設置斷點條件僅當指定的布爾表達式為 true 時,條件斷點才停止執(zhí)行。如果要設置條件斷點,請打開“新建斷點”對話框,然后在“條件”字段中輸入表達式。 例如,打開 ArrayFill.java,在 main 方法的 loadNames 方法調用中設置插入點,然后按 Ctrl-Shift-F8 組合鍵。在該對話框的“條件”字段中輸入 names!=null 并單擊“確定”。然后按 F5 鍵開始調試項目。此時會在 loadNames 方法內中斷程序的執(zhí)行。 定制斷點輸出在“新建斷點”對話框中,您還可以指定到達斷點時打印的信息。請在對話框底部的“打印文本”字段中輸入任何消息。您可以使用變量引用要顯示的某些類型的信息。 斷點類型
設置監(jiān)視通過使用監(jiān)視,可以在應用程序執(zhí)行期間跟蹤變量或表達式值的變化。要設置監(jiān)視,請在源代碼編輯器中選擇要設置監(jiān)視的變量或表達式,然后單擊鼠標右鍵并選擇“新建監(jiān)視”(Ctrl-Shift-F7)。 您還可以在“監(jiān)視”視圖中創(chuàng)建固定監(jiān)視。常規(guī)監(jiān)視描述的是變量的內容,而固定監(jiān)視描述的則是當前為變量指定的對象。要創(chuàng)建固定監(jiān)視,請右鍵單擊“局部變量”或“監(jiān)視”視圖中的任意項,然后選擇“創(chuàng)建固定監(jiān)視”。 |
|
|