麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Java調試教程--基礎知識概述

2019-11-18 14:24:40
字體:
來源:轉載
供稿:網友

  摘要

  java 平臺提供了用于調試處理的語言支持。可以用某些編譯器選項來編譯程序,這些編譯器選項指導編譯器在目標文件中生成符號化信息。假如所使用的編譯器不是javac,請參考編譯器文檔以了解如何使用調試信息來編譯程序。



--------------------------------------------------------------------------------


  Java調試教程--基礎知識概述

  SUN Laura Bennett

  預備要調試的程序

  Java 平臺提供了用于調試處理的語言支持。可以用某些編譯器選項來編譯程序,這些編譯器選項指導編譯器在目標文件中生成符號化信息。假如所使用的編譯器不是javac,請參考編譯器文檔以了解如何使用調試信息來編譯程序。

  假如使用 javac 編譯器來構建要調試的代碼,請使用 -g 編譯器選項。該選項讓您可以在調試時檢查局部、類實例和靜態變量。假如不使用 -g 選項來編譯類,依然可以設置斷點并單步調試代碼;但是將不能檢查變量。(斷點是在代碼中手工指定的希望停止執行程序的位置。)

  即便使用 -g 選項來編譯應用程序,在核心 Java 平臺系統類中仍不能使用本地調試值。假如需要列出某些系統類的列表局部變量,需要使用 -g 選項來編譯那些類。使用-g 選項來重新編譯 rt.jar 或 src.zip 文件中的類。將類路徑指向正確的類文件,以便使用新編譯的對話類來運行應用程序。在 Java 2 中,使用 boot classpath 選項,這樣?請記住,假如使用用于優化代碼的 -O 選項進行編譯,那么將無法調試類。優化將除去類中的所有調試信息。

  注:驗證是否正確設置了 CLASSPATH 環境變量,以便調試器和 Java 應用程序知道在哪里可以找到類庫。還應該檢查正在使用的工具,查看是否還有其它必需或可選的環境變量。

  設置斷點

  調試的第一步是找出代碼的哪個位置出了錯。設置斷點有助于完成此項工作。斷點是放置在程序中的臨時標記,用于告訴調試器在何處停止執行程序。例如,假如程序中的某個特定語句造成了問題,可以在包含該語句的那行中設置斷點,然后運行程序。在執行該語句之前,將在斷點處停止執行。然后可以檢查變量、寄存器、存儲器和堆棧的內容,然后跨過(或執行)該語句來查看問題是如何產生的。許多調試器都支持幾種斷點。某些最常用的斷點是:

  行斷點,在執行程序中某特定行的代碼之前觸發。

  方法斷點,在到達已設置了斷點的方法時觸發。

  計數器斷點,在計數器假設或超過某個特定值時觸發。

  異常斷點,在代碼拋出特定類型的異常時觸發。

  存儲器更改斷點,在更改了某特定存儲器地址范圍中的存儲器時觸發。

  地址斷點,在到達設置了斷點的地址處觸發。

  注:某些調試器只支持編譯型 Java 代碼(如 JIT 編譯器)中某些類型的斷點,而不支持解釋型代碼(如由 javac 工具編譯的代碼)中的斷點。“地址斷點”就是這樣的例子。每種工具設置斷點的方法都略有不同。請查看工具的文檔。

  您也許會問,我怎么知道在哪里放置斷點呢?

  假如您對此問題仍感到不知所措,那么可以在 main() 方法中的程序開始處設置斷點。

  假如代碼生成了堆棧跟蹤,那么在堆棧跟蹤結束的區域中設置斷點。可以在堆棧跟蹤中看到源代碼的行號。

  假如輸出或圖形顯示的特定部分沒有正確顯示信息(例如,文本字段顯示了錯誤的文本),可以在創建組件的位置設置斷點。然后可以單步調試代碼,并顯示分配給 GUI 對象的值。

  經驗會教您如何在最適當的位置設置斷點。在一個類或程序中可以設置多個斷點。在調試代碼時,通常會禁用或啟用斷點,或者添加或刪除斷點。工具可以讓您查看所有斷點的位置,并可以在一步操作中刪除所有斷點。

  單步調試程序

  單步調試程序就是解決這些棘手的調試問題的基本方法。它讓您可以運行在類主體中調用的方法。請注重,不必設置斷點就可以停止圖形用戶界面 (GUI) 程序。在設置了斷點之后,開始在調試器中執行代碼。碰到第一個斷點時,可以跨過語句,步入其它方法或類,繼續運行直至到達下一個斷點,或者繼續運行直到程序結束。步入調試器時,會看到的常見項是:

  Stepping into 執行當前行。假如當前行包含對某個方法的調用,則執行轉到被調用方法的第一行。假如方法在未用調試信息編譯(即,用 -g 選項)的類中,則會看到一條消?

  Stepping over 執行當前行,但不會在該行中調用的任何函數或例程中停止。

  Step return 從當前執行點一直執行到調用當前方法的那行代碼的后面一行。

  檢查變量

  通常,程序會因為沒有正確設置變量的值而發生信息轉儲。最常見的情況是試圖將變量與空值比較或對變量除以零。找出是否存在這種情況的最簡便方法是在發生錯誤的位置檢查值。通常,不會在您期望的位置對變量進行賦值。

  可視調試器通常有一個監控窗口,在該窗口中顯示了當前所在的類中所有局部變量的值。某些調試器甚至顯示變量的地址,甚至還讓您動態更改變量值以查看程序是否按您的最初設想繼續執行。命令行調試器通常通過命令來處理相同功能。使用命令行功能,甚至可以通過顯示每一行和每一列的內容來檢查數組的全部內容。

  雖然大多數調試器只在監控窗口中顯示類作用域中的局部變量,但有些調試器讓您可以在它離開作用域之后繼續監控變量。某些調試器支持查看寄存器。請注重,只能在編譯型 Java 程序中查看寄存器,在解釋型程序卻不行。

  堆棧跟蹤

  當 Java 程序轉儲信息時,它會生成控制臺窗口的堆棧跟蹤。堆棧跟蹤告訴開發人員程序執行到發生問題的位置經過的確切路線。堆棧跟蹤將指出類和方法名稱,以及源代碼行號(假如使用調試選項進行編譯)。假如從跟蹤的起點開始,可以向回追溯代碼,以查看究竟執行了什么語句。這是一種迅速確定程序中哪里出錯的方法。

  可以使用以下語句人為地生成堆棧跟蹤。

  Throwable().PRintStackTrace() 用于在某一時刻生成方法代碼的跟蹤。此跟蹤將顯示線程之間的方法調用。

  Thread.currentThread.dumpStack() 用于只生成當前線程的快照。

  假如需要了解程序在什么情況下會生成輸出,就應該實施堆棧跟蹤。以下是實施堆棧跟蹤的一個示例。此代碼段方法創建了文件的副本。我們通過比較兩個文件的長度來檢查復制是否成功。假如不相等,我們將對一個建立跟蹤,然后打印堆棧跟蹤(見以粗體字顯示的語句)。Throwable() 是 java.lang 包中的一個類。printStackTrace() 是 Throwable() 類中的一個方法,它將打印出程序執行路線的跟蹤。


public static boolean copyFile( String sourceFile, String targetFile)
{
........
........
// see if the copy sUCceeded.
if (success)
{
// see if the correct number of bytes were copied
long newFileLength = new File(targetFile).length();
if (oldFileLength != newFileLength)
{
Debug.trace(1, sourceFile + Constants.BLANK_STRING +
Long.toString(ol
dFileLength));
Debug.trace(1, targetFile + Constants.BLANK_STRING +
Long.toString(ne
wFileLength));
Throwable().printStackTrace();
return false;
}
}
else
{
Debug.trace(1, sourceFile);
Debug.trace(1, targetFile);
return false;
}
........
........
return true;
}

  您可能會發現堆棧跟蹤沒有打印行號。這就是所謂的“編譯代碼”。要獲取行號,使用 nojit 選項或命令行自變量 Djava.compiler=NONE 來禁用 JIT 編譯器。但是,假如得到了方法的名稱以及它所屬的類,獲取行號就不那么重要了。

  診斷方法

  Java 語言提供了 Runtime() 類中的方法,用于跟蹤對 Java 虛擬機的調用。這些跟蹤將生成一個列表,它包含程序對 JVM 字節碼的每一個方法調用。請注重,該列表可能會生成大量輸出,所以每次使用它時應針對小段代碼。將以下行添加到源代碼中,以打開跟蹤:

traceMethodCalls(true)

  將以下行添加到源代碼中,以關閉跟蹤:

traceMethodCalls(false)

  啟動 JVM,當它被發送到標準輸出時,監視輸出。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九九精品在线播放 | av久草| 国产黄色一级大片 | 婷婷一区二区三区 | 少妇一级淫片高潮流水电影 | 欧美一级做a | 日本中文视频 | 国产流白浆高潮在线观看 | 久久久大片 | 精品久久久久久综合日本 | 草莓福利社区在线 | 国产一级一国产一级毛片 | 性日本xxx| 国产自91精品一区二区 | www69xxxxx| 国产一区二区三区视频观看 | 毛片大全 | 成人免费在线播放 | 亚洲免费观看视频 | 国毛片 | 国产精品久久久久一区二区 | 毛片在线免费观看网址 | 久久成人福利 | 日韩精品a在线观看 | 免费国产一级特黄久久 | 色婷婷久久久亚洲一区二区三区 | 久久草在线视频国产 | 草草免费视频 | 久久久久久久九九九九 | 国产精品久久久久久久午夜片 | 91成人在线免费视频 | 特级黄色影院 | 二区三区在线观看 | 男女无遮挡羞羞视频 | 久久999久久| 韩国三级日本三级香港三级黄 | 久久新网址 | 202z中文字幕第一页 | 日本a大片| 麻豆91精品91久久久 | 精品国产乱码久久久久久丨区2区 |