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