?? debug.html
字號:
<!-- saved from url=(0022)http://internet.e-mail -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta name="generator" content="Microsoft FrontPage 4.0">
<title>Building Applications: Debugging Java programs</title>
<meta name="Author" content="kt">
<link type="text/css" href="../jbdocs.css" rel="stylesheet">
</head>
<body bgcolor="#fefef2" style="FONT-SIZE: 9pt">
<a name="using_the_debugger"></a>
<STRONG><FONT color=#0080FF size=3 >調試 Java 程序</font></strong>
<hr>
譯者名字: zdx_nari(JD001)<br>
郵件地址:<A href="mailto:zdx_nari@hotmail.com">zdx_nari@hotmail.com</A>
<p>調試就是在你的程序中定位和修改錯誤的過程。JBuilder的集成調試器使你能在JBuilder的環境中進行調試。 通過<a href="../ui/menus/mrun.html">Run</a>菜單條可以訪問調試器的許多功能部件。你也可以在編輯器或在調試器中使用右擊菜單來訪問調試器的功能部件。</p>
<p>當調試器暫停你的程序,你可以察看程序數據項的當前值。在調試期間修改數據值提供了在程序運行時,檢驗假想錯誤(bug)的方法。</p>
<p> 調試指南,請參閱 <a href="../tutorials/debug/dbtutorial.html">"編譯, 運行 和 調試."</a></p>
<p> 其余的信息和技巧可以在以下特定的調試主題中得到:</p>
<ul>
<li> 如果你的程序使用了<code>JDataStore</code>組件,請參閱 <cite>JDataStore Programmer's Guide</cite> 的<a href="../datastore/trouble.html">"Troubleshooting"</a> 章節。 <span class="bsku">(JBuilder Professional and Enterprise)</span></li>
<li> 如果你正在調試一個分布式應用程序,請參閱 <cite>Distributed Application Developer's Guide</cite>的 <a href="../distributed/distdebugging.html">"Debugging distributed applications" </a>章節。<span class="bsku">(JBuilder Enterprise)</span></li>
</ul>
<!--************************************************************--><a name="types_of_errors"></a>
<hr>
<p><font size="3" color="#000080"><b>錯誤類型</b></font></p>
<!--BNDX="errors:types of"-->
<p>調試器可以幫助找到運行器錯誤和邏輯錯誤。如果你找到或懷疑一個程序運行或邏輯錯誤,你可以通過在調試器的控制下運行你的程序從而開始一次調試過程(session)。 </p>
<a name="run-time_errors"></a>
<p><b><font color="#000080" size="2">Runtime errors</font></b></p>
<!--BNDX="runtime:errors;runtime:exceptions;debugging:runtime exceptions"-->
<p>如果你的程序調試通過了,但當你運行它時卻給出違例或懸掛(hang),你遇到了一個運行時錯誤。你的程序包含了有效的聲明,但這些聲明在它們被執行時導致了錯誤。例如,你的程序試著打開一個不存在的文件,或者使一個數字被零除。</p>
<p>沒有調試器,運行時錯誤很難被定位,因為編譯器并沒有告訴你它們的任何情況。經常,你可以使用的唯一線索就是程序運行的結果,例如屏幕的外形以及由運行時間錯誤產生的錯誤消息。</p>
<p>盡管你可以通過搜索你的程序源代碼找到運行時間錯誤,但調試器可以幫助你快速地捕捉到這些錯誤類型。使用調試器,你可以運行到一特定的程序位置。在那兒,你可以一次一個聲明(one statement at a time)地執行你的程序,觀察你程序每一步的行為。在那兒,你可以修改源代碼,重新編譯程序,繼續測試你的程序。</p>
<p>如果你的程序拋出了一個運行時間錯誤,將在<a href="#console_view">Console output, input, and errors view</a>打印一個堆跡(stack trace)。你可以雙擊堆跡的一行,來到對應的源文件中的那行代碼。</p>
<p>在下面的例子中,一字符串("<kbd>eeee</kbd>")替代一個數字進入一個輸入域。<code>NumberFormatException</code> 違例將被拋出。<code>FloatingDecimal.java</code>的源代碼在編譯器中顯示;這是被拋出違例其所在的類。</p>
<p class="bfig">編譯器中的運行時錯誤</p>
<p><img border="0" src="images/db_runtime_error.gif" width="602" height="490"> <!--************************************************************-->
</p>
<a name="logic_errors"></a>
<p><font size="2" color="#000080"><b>邏輯錯誤</b></font></p>
<!--BNDX="logic errors;debugging:logic errors"-->
<p>邏輯錯誤是在你程序的設計和實現時所發生的錯誤。你程序的聲明是有效的(它們執行有結果),但它們執行的行為并不是你寫代碼時你想象中的行為。例如,當變量包含了不正確的值,圖像看起來不正確,或者當程序的輸出不正確,就可能發生邏輯錯誤。</p>
<p> 邏輯錯誤經常是最難發現的錯誤類型,因為它們在你想不到的地方出現。為了確信你的程序是按照設計要求而工作的,你需要徹底測試程序的所有方面。只有通過細察用戶接口和程序輸出的每一部分,你才能確信程序的行為與它的設計是一致的。和運行時間錯誤一樣,調試器幫助你在程序執行時監視你程序變量和數據對象的值,從而定位邏輯錯誤。</p>
<p>
<a name="overview_of_the_debugging_process"></a>
</p>
<hr>
<p><font size="3" color="#000080"><b>調試過程概覽</b></font></p>
<!--BNDX="debugging:overview"-->
<p>程序設計后,程序編碼和調試的不斷循環組成了程序開發。只有在你徹底的測試了你的程序后,你才成發布你它。為了確信你測試了程序的所有方面,最好是有一個全面的測試和調試計劃。</p>
<p>
一個好的調試方法包括了把你的程序分解成幾個可以系統調試的不同片斷(section)。通過緊密監視每一程序片斷的聲明,可以證實每一部分是按照設計來執行的。如果你發現了一個程序錯誤,你可以在一的源代碼中改正這個問題,重新編譯程序并繼續測試。</p>
<p><span class="bscan">注意:</span> 你可以用支持JPDA debugging API的任何JDK進行調試。通常,你將用JBuilder裝載的JDK版本進行調試。<a name="compiling_with_debug_info"></a></p>
<p><font color="#000080" size="2"><b>用符號化調試信息編譯工程</b></font></p>
<!--BNDX="compiling:programs with debug info;debugging:compiling with debug info;debug information:"-->
<p>當你開始一次調試過程時,你需要用符號化調試信息編譯你的工程。符號化調試信息使調試器在你的程序源代碼和編譯器產生的Java 字節碼之間進行連接。</p>
<p>默認情況時,JBuilder在你編譯時包括符號化調試信息。為了確信當前工程設置了這個選項,</p>
<ol>
<li>選擇 Project|Project Properties,打開工程屬性對話框。</li>
<li>選擇 Build 標簽</li>
<li>檢查這些調試選項的一種:
<ul>
<li>Source , Line and Variable Information: 當你編譯,構造,或者重建一個節點時,包含了在<code>.class</code>文件中的源名,行數以及當地變量信息的調試信息。</li>
<li>Source And Line Only: 當你編譯,構造,或者重建一個節點時,僅包含了在<code>.class</code>文件中的源名,行數的調試信息。</li>
<li>Source Only: 當你編譯,構造,或者重建一個節點時,僅包含了在<code>.class</code>文件中的源名的調試信息。</li>
</ul>
</li>
</ol>
<p>為了給所有新的工程設置這個選項,選擇 Project|Default Project Properties,然后在 Build 頁選擇位于第一的三個調試選項的一種。(設置默認的工程屬性并不影響已存在的工程。)</p>
<p> 如果你選擇了不包括任何調試信息的 None 選項,你仍可以進行調試。沒有調試信息,<kbd>this</kbd>對象仍可以用來調試。通過選擇這個選項,你可以顯著地把類的尺寸減為最小。</p>
<p><span class="bscan">注意:</span> 你不能在Java API 類中看到變量信息,因為它們編譯時僅有源名和行數信息。然而,你可以跟蹤進類里。學習怎樣跟蹤進類里,請參閱 <a href="debug2.html">"Controlling which classes to trace into."</a> </p>
<p>當你產生符號化的調試信息,編譯器把這些信息存入相關的<code>.class</code>文件中。這就使得<code>.class</code>文件比不帶調試信息而編譯的文件大許多。你可以在部署前把這個選項關掉。</p>
<p>為了在調試前自動進行編譯,在 Project Properties 對話框 Run 頁中選中 Compile Before Debugging 選項。 這個選項可以用來在調試器的控制下在你的工程運行前自動的編譯它。如果不選中這個選項,JBuilder將在調試你的工程前不編譯它,所以你的源文件和類文件會失去同步。如果這個選項被關了,先使用 Project|Make 命令。</p>
<a name="starting_debugger"></a>
<p><font color="#000080" size="2"><b>啟動調試器</b></font></p>
<!--BNDX="debugging:starting;starting:the debugger"-->
<p>一旦在編譯你的工程時包含了調試信息,你可以用以下的菜單項來啟動調試器。</p>
<p class="btbl">啟動調試器的菜單命令</p>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<th style="background-color: #000080"><font color="#FFFFFF" size="2">命令</font></th>
<th style="background-color: #000080"><font color="#FFFFFF" size="2">快捷鍵</font></th>
<th style="background-color: #000080"><font color="#FFFFFF" size="2">描述</font></th>
</tr>
<tr>
<td><font size="2">Run|Debug Project</font></td>
<td><font size="2"><kbd>Shift + F9</kbd> or  <img src="images/toolbardebug.gif" align="top"></font></td>
<td><font size="2">在調試器里啟動程序,在一個斷點或首先需要用戶輸入的第一行代碼前暫停執行。</font></td>
</tr>
<tr>
<td><font size="2">Run|Step Over</font></td>
<td><kbd><font size="2">F8</font></kbd></td>
<td><font size="2">在可執行代碼的第一行暫停執行</font></td>
</tr>
<tr>
<td><font size="2">Run|Step Into</font></td>
<td><kbd><font size="2">F7</font></kbd></td>
<td><font size="2">在可執行代碼的第一行暫停執行</font></td>
</tr>
</table>
<p>如果你還沒為你的程序選擇 main 類,Project Properties 對話框的 Run 頁在調試過程開始前將被顯示。對于程序來說,選擇包含<code>main()</code>方法的類。對于小應用程序來說,選擇包含<code>init()</code>方法的類或小應用程序的 HTML 文件。 </p>
<p>在你的工程中要調試一個特定的類,而不是整個工程,在瀏覽窗中選中這個文件,右擊并選中 Debug。</p>
<p> 每次當你啟動調試器時,你就啟動了一次調試過程。更多信息,參閱 <a href="#debugging_session">"Debugging sessions."</a></p>
<p><span class="bscan">注意:</span> 為一次調試過程選擇一個調試配置,點擊主菜單欄中的 Debug Projec 圖標右邊的向下箭頭。關于調試配置的更多信息,參閱 <a href="debug5.html">"Creating debugger configurations."</a><a name="run_under_debugger"></a> </p>
<p><font color="#000080" size="2"><b>在調試器的控制下運行</b></font></p>
<!--BNDX="debugger:running under control of;running:under debugger control"-->
<p>當你在在調試器的控制下運行你的程序,程序的行為和通常的一樣---你的程序創建窗口,接受用戶輸入以及顯示輸出。調試器可以中斷的程序,允許你使用調試器的視圖來檢查程序的當前狀態。通過觀察變量值,調用棧上的方法以及程序輸出,你可以確信你正在檢查的代碼區執行起來就像它被設計的那樣。</p>
<p> 當你在在調試器的控制下運行你的程序時,你可以看到你程序在其創建的窗口中的行為。當你調試時,放置好窗口從而你可以同時看到調試器和你的應用程序窗口。當焦點在調試器視圖和你的應用程序間相互轉換時,為了防止窗口的閃爍,排列窗口使它們不重疊。</p>
<a name="pause_program_execution"></a>
<p><font size="2" color="#000080"><b>中斷程序執行</b></font></p>
<!--BNDX="debugging:pausing program execution;pausing program execution"-->
<p>當你在使用調試器時,你的程序處于兩種可能的狀態之一:<em>運行</em> 或者 <em>暫停</em></p>
<ul>
<li>當調試器工具欄的 Pause 圖標<img border="0" src="images/db_toolbar_pause.gif">處于可用狀態,你的程序正在運行。</li>
<li>當你點擊 Pause 圖標,你的程序就被中斷。當你的程序被中斷,你可以檢查數據值。調試器工具欄的步進(stepping)圖標變得可用。碰到一個斷點或由步進而停止也可以中斷執行。</li>
</ul>
<p>為了恢復程序的執行,選中調試器工具欄的 Resume Program 圖標  <img border="0" src="images/db_toolbar_resume.gif"> 。當調試過程結束,這個圖標變為 Restart Program 圖標 <img src="images/toolbardebug.gif" align="top">  ,并重新開始調試過程。</p>
<a name="end_debugging_session"></a>
<p><font color="#000080" size="2"><b>結束調試過程</b></font></p>
<!--BNDX="debugging:ending session;ending debugging session"-->
<p>為了結束當前的調試過程并釋放程序占用的資源,選中 Reset Program 圖標 <img src="images/db_toolbar_reset.gif" align="top">。</p>
<p>你也可以退出程序而關閉調試過程。若要移掉調試欄,右擊調試欄并選中 Remove。</p>
<hr>
<br>
<a name="debugger_ui"></a>
<p><font color="#000080" size="3"><b>調試器用戶界面</b></font></p>
<!--BNDX="debugger:user interface"-->
<p>如果工程或類編譯成功,調試器就在 AppBrowser 的底部顯示出來。 </p>
<ul>
<li>在 AppBrowser 的底部的水平標簽代表了 <a href="#debugging_session">調試過程(debugging sessions)。</a></li>每一個標簽代表了一個新的過程。
<li>在 AppBrowser 左面較底部分的垂直標簽代表了 <a href="#debugger_views">調試器視圖(debugger views)。</a></li>試圖顯示了當前被選的調試過程。每個試圖顯示了圖標,用來指出在視圖中的被選的每一項的狀態和類型。
<li><a href="#debugger_toolbar">調試器工具欄</a> 用來顯示當前被選的調試過程。</li>
</ul>
<p class="bfig">調試器用戶界面</p>
<p><img border="0" src="images/db_in_appbrowser_overview.gif" width="630" height="546"> </p>
<a name="debugging_session"></a>
<p><font color="#000080" size="2"><b>調試過程</b></font></p>
<!--BNDX="debugging:sessions"-->
<p>調試器允許你在多個調試過程中調試多個進程。多個進程可以在同一個 JBuilder 工程中,或在不同的工程中。這就允許在同一個 JBuilder 實例中,同一時刻,同時調試客戶端和服務器端進程。 </p>
<p>在每個單獨的工程中存儲了跟蹤關閉的觀察點(watches),斷點和類。在一個工程中,所有的斷點和觀察點應用到了所有的進程中。可以為一個運行時配置有選擇地關閉斷點。
<p>當你在 Run 菜單條使用除了Run Project, Debug Project 和 Configurations 外的命令時,你仍在被選的調試過程中。當你使用調試器工具郎中的圖標時,你同樣仍在被選的調試過程中。Configurations </p>
<p>為了結束當前的調試過程并釋放程序占用的資源,選中 Reset Program 圖標 <img border="0" src="images/db_toolbar_reset.gif">。你也可以通過右擊調試過程標簽并選中 Remove Tab 來退出程序。盡管在標簽被移走前你將快速地結束進程,但首先使用 Run|Rest Program 是個好主意。</p>
<a name="debugger_views"></a>
<p><b><font size="2" color="#000080">調試器視圖</font></b></p>
<!--BNDX="debugger:views"-->
<p>調試器視圖允許你看到你程序的內部及看到下一步將發生什么。你使用調試器視圖來檢查和改變數據值,在你的程序中向前和向后跟蹤,檢查一個方法的內部處理過程和那個方法的調用,在你的程序中跟隨一個獨立的線程。</p>
<p>調試器視圖在 AppBrowser 的底部顯示。選中在調試器左邊的標簽從而選擇某個視圖。視圖(除了 Console output, input, and errors 視圖)也可以作為浮動窗口而顯示。浮動窗口允許你在同一時間看見多個調試器視圖,而不是不得不在視圖間前后切換。 <span class="bsku">(浮動窗口是 JBuilder Professional and Enterprise 的一項屬性)</span></p>
<ul>
<li>要使一個視圖作為一個浮動窗口顯示,右擊這個視圖的空白區域,然后選擇 Floating Window 。 </li>
<li>要關閉浮動窗口,點擊浮動窗口的 Close(關閉) 按鈕或者右擊這個視圖的空白區域并除去 Floating Window 選擇。</li>
<li>在你關閉了浮動窗口后,要恢復默認的視圖順序,右擊視圖的空白區域,然后選中 Restore Default View Order。</li>
</ul>
<p>調試器視圖也有右擊菜單。這些菜單的命令經常同那些在 Run 或 View 菜單里的命令是重復的,這樣就使你可以容易地控制調試器。</p>
<p>另外,每一個調試器的視圖顯示了不同的圖標來指明所選項的狀態。例如,一個斷點可以被禁止(disabled),檢驗(verified),未檢驗(unverified),或者是無效的(invalid) - 每一個狀態用視圖左邊緣的一個小圖標來可視化的指明。</p>
<p>調試器的視圖,圖標以及右擊菜單在下面描述。</p>
<a name="console_view"></a>
<p><font color="#000080" size="2"><b>Console output, input, and errors 視圖</b></font></p>
<!--BNDX="debugger:Console output, input, and errors view;Console output, input, and errors view"-->
<p>Console output, input, and errors 視圖 <img src="images/dbconsole.gif" border="0" align="bottom"> 顯示程序的輸出以及程序內的錯誤。它也允許你輸入程序所需的任何輸入。如果程序有任何的輸出或任何的錯誤消息被顯示出來,那么圖標上的圖像就發生變化。</p>
<p>運行時間違例在這個視圖中顯示。</p>
<p class="btbl">Console output, input, and errors 視圖中的圖標</p>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<th style="background-color: #000080"><font color="#FFFFFF" size="2">圖標</font></th>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -