国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

Java調試教程--客戶機端調試

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

  摘要

  有許多調試技術可供選擇。請一定要檢查工具文檔以查看它是否支持這些技術。了解不同的調試技術有助于選擇符合您所有需要的調試器。


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



  java調試教程(四)--客戶機端調試

  SUN Laura Bennett

  介紹客戶機端調試技術

  有許多調試技術可供選擇。請一定要檢查工具文檔以查看它是否支持這些技術。了解不同的調試技術有助于選擇符合您所有需要的調試器。

  使用 system.out.PRintln() 進行調試

  有必要提一下簡單化調試。假如有一小段代碼,應該使用 System.out.println(),不必浪費時間使用全功能調試器來裝入并單步調試這些代碼。在運行時期間,System.out.println() 會在控制臺或將輸出重定向到的位置上顯示消息、變量和狀態信息。所有對象都繼續了 toString() 方法。在開發新的對象時,覆蓋此方法并生成您自己的對象字符串表示法是個不錯的想法。

  Michael C. Daconta 的 Java Pitfalls(請參閱參考資料)共享了應用 println()方法的有用技術。Daconta 建議創建 DebugManager() 類,這個類答應您根據某些類或應用程序來設置一個調試標志。假如代碼中有許多 if(debug) 嵌套語句,那么可以使用DebugManager() 類作為代替。仍然可以選擇開始調試整個系統。

  一個示例方案就是答應您劃分單元和顯示背景的映射系統。在某些情況下,可能想查看只適用于 Plot Units 應用程序的調試語句,而在其它情況下,可能想要查看整個系統的調試。應該創建類似于下列代碼的 DebugManager() 類:


public class DebugManager
{
public static final String SYSTEM_DEBUG_KEY = "system.Debug";
public static final boolean debug;
static
{
debug = toBoolean(SYSTEM_DEBUG_KEY);
}
private static boolean toBoolean(String key)
{
String sDebug = System.getProperty(key);
if (sDebug != null && sDebug.equalsIgnoreCase("true"))
debug = true;
else
debug = false;
}
public static boolean getSystemDebug()
{
return debug;
}
public static boolean getSystemDebug(String applicationKey)
{
if (debug′ ′debugToBoolean(applicationkey))
return true;
else
return false;
}
}



  使用 system.out.println() 進行調試的練習

  使用上一屏中的代碼,應用程序會生成類似于以下的調用來查詢調試方式(“開”或“關”):boolean debug = DebugManager.getSystem.Debug(applicationkey);輸入以下命令行,對劃分工具或背景或者整個系統進行調試:


java -DplotTool.Debug=true -DbackgroundLoader.Debug=true
-Dsystem.Debug=false MapSystem



  以上的語句說明了對 plotTool 應用程序和背景顯示應用程序打開了調試,但對整個系統關閉了調試。每個應用程序的應用程序鍵是: plotTool ;應用程序密鑰是 plotTool.Debug;背景顯示程序應用程序鍵是 backgroundLoader.Debug;整個系統的應用程序鍵是 system.Debug。

  真正的代碼將封裝在 if(debug) 語句中。假如調試是真,則將執行封裝的代碼,然后打印 System.out.println() 方法的結果。

  總之,假如要調試少量代碼,只推薦使用 if(debug)。將 DebugManager() 創建成單獨的編譯類,以便在需要時能立即使用。

  使用注釋進行調試

  使用注釋是另一種調試方法。使用二分法搜索算法,開始時就注釋掉大部分代碼,然后縮?到錯誤重新出現。此時,就找到了出錯的位置。此外,建議不要在大規模的項目中使用二分法搜索算法。

  連接到正在運行的程序

  許多程序員使用連接到正在運行的進程的技術,作為遠程調試的替代技術,用于測試跨平臺兼容性。可以驗證某個應用程序在不同的 JVM上是否正常運行。這種技術還可以讓您確保在另一個機器上有全部必需的系統資源。某些調試器可以讓您連接到多個 JVM,調試多層系統時,這樣做將變得價值連城。隨著一層變成活動的,調試器連接到它的 JVM,并開始徹底檢查它。

  將調試器連接到發生錯誤或故障的正在運行的程序或正在運行的 JVM。

  使用這種調試方法有兩個主要原因:

  預計程序中某個特定位置會有問題,但又不想單步調試程序或者設置斷點。

  正在開發或維護偶然會暫掛的程序,并且想要找出暫掛的原因。

  在這種情況下,可以連接調試器,并查找死循環或其它可能導致程序暫掛的問題。 正在連接的 JVM 必須正在以調試方式運行。它既可以是遠程系統,也可以是本地系統。源文件可以在任意一個系統上。

  遠程調試

  設想程序在另一個用戶的系統上運行與在您自己的系統上運行的運轉情況肯定會不同。從您的系統上,使用遠程調試功能來調試其它系統上的遠程程序。遠程調試要求在一個計算機上運行應用程序,并在另一個計算機上調試它。當調試復雜的GUI應用程序時,遠程調試會變得非常有用。調試設施本身的用法就象調試運行本地的代碼完全一樣。然而,設置和監控調試會話稍微復雜一些。請參考調試器文檔,以查看它是否支持遠程調試,以及如何設置環境。

  遠程調試的主要要求是訪問網絡機器。正在調試的類文件必須駐留在遠程機器上,并且已經編譯過以備調試。由于使用了 GUI 調試器,于是客戶機用戶界面在一個系統上運行,而調試引擎在另一個系統上運行。

  有兩種遠程調試:同類和異類。當本地和遠程系統都使用相同的操作系統時,將發生同類遠程調試。當本地和遠程系統使用不同的操作系統時,將發生異類遠程調試。

  為什么要使用遠程調試呢?

  當調試器用戶界面獨立于應用程序用戶界面時,易于調試使用圖形或有圖形用戶界面的應用程序。與應用程序的交互發生在遠程系統上,而與調試器的交互發生在本地系統上。已經針對一個平臺編譯了要調試的程序,而調試器用戶界面不在該平臺上運行。可以使用遠程調試功能在調試遠程應用程序時利用調試器用戶界面。

  按需求調試

  無論何時在程序中發生未處理的異常或不可糾正的錯誤,按需求調試都可以讓您打開調試會話。調試器啟動,并連接到程序中發生故障的位置。這樣做可以節省時間,有兩種方法:不必重新創建錯誤,在碰到故障之前,程序可以全速運行而不會受到調試器的干擾。

  由于使用了按需求調試,可以找到并修復應用程序中的問題,讓應用程序繼續運行。

  優化代碼調試

  調試優化代碼有一點復雜,因為不能同時優化和調試代碼。有時,問題只在優化期間出現,從而指出存在邏輯錯誤。

  捕捉這些類型的錯誤的最佳方法是使用二分法搜索技術,如下所述:

  開始時,只優化一部分代碼,查看錯誤是否仍然存在。在每次更改優化模塊數量之后,假如錯誤仍然存在,則減少優化模塊的數量;假如錯誤消失了,則優化更多模塊。最后將錯誤范圍縮小到單個模塊或少數模塊。查找問題,如在變量被寫入之前讀取該變量,或超過存儲器范圍的數組下標。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 田阳县| 花莲市| 麟游县| 正安县| 台前县| 探索| 梁河县| 长泰县| 施甸县| 扶沟县| 麟游县| 浙江省| 崇仁县| 塔河县| 论坛| 绥阳县| 临高县| 松溪县| 岳池县| 徐汇区| 九龙县| 辉南县| 墨竹工卡县| 澄江县| 郑州市| 渝中区| 高尔夫| 锡林郭勒盟| 绥棱县| 贡觉县| 色达县| 高密市| 博爱县| 襄城县| 麦盖提县| 纳雍县| 图木舒克市| 天津市| 柘城县| 南木林县| 博湖县|