- Java編程從入門到精通
- 胡平 劉濤主編
- 1019字
- 2025-04-02 16:03:10
1.6.4 程序調試
無論使用何種編程語言和編程工具,調試(Debug)的基本原理和步驟都是一樣的。
(1)首先,通過人工檢查的方式粗略判斷出錯誤所在的范圍,若無法判斷,則認為被執行的第一行代碼可能有錯誤。
(2)然后在范圍的起始處設置斷點,并以調試方式執行程序。當程序執行到斷點處時,會暫時停止執行。
(3)接著,查看相關的變量或感興趣的表達式在這一刻的實際值與預期值(即人腦計算出來的值,假設該值總是正確的)是否一致。若一致,則讓程序從該斷點處繼續執行下一行代碼。重復這一過程直至發現不一致,此時,被執行完的最后一行代碼就是錯誤所在的位置。
注意:在對比實際值與預期值的過程中,還要對比程序的實際執行流程是否與預期流程一致,這對于定位分支、循環等結構中錯誤代碼所在的位置尤為有用。
編程工具一般會提供諸如設置斷點、查看變量或表達式,以及讓程序從斷點處執行下一行或下若干行代碼的功能。JDK也提供了用于調試程序的工具——jdb.exe,但該工具是基于命令行的,在實際使用中非常不方便,對于較為復雜的程序,通常借助IDE來調試(詳見附錄A)。
人工檢查與調試這兩種判斷邏輯錯誤所在位置的方式,讀者都應當熟練掌握,當程序邏輯較為復雜時,應優先考慮使用調試方式。當然,調試方式也有著自身的局限性,對于某些特定的程序,有時很難用調試的方式來定位邏輯錯誤,如多線程程序[3]。對于這樣的程序,可以采用一些輔助的技巧來幫助尋找邏輯錯誤。例如,在程序的合適位置添加輸出語句,將變量或表達式的值輸出到命令行窗口,以觀察程序的運行細節、注釋或取消注釋某些代碼行并結合排除法判斷錯誤所在行等。
總而言之,在定位程序的邏輯錯誤時,沒有一種方法能適用于所有場合。編程時,應學會并盡量遵守某些已被證明是行之有效的編碼規范和最佳實踐(詳見附錄C),以最大限度地減少邏輯錯誤的出現機會。當錯誤不可避免地發生時,應當根據錯誤所表現的具體特征以及實際情況,靈活運用多種方式來分析和定位邏輯錯誤。
[1]對于不存在編譯過程的解釋型語言,運行具有語法錯誤的程序時,運行環境將直接拋出錯誤。
[2]要求比較嚴格的軟件項目可能會規定代碼必須符合“零警告”。
[3]若在多線程程序的代碼中設置斷點,程序會因該斷點而暫停執行其他線程。另外,由于CPU對多個線程的準確調度時機是無法預期的,斷點的設置將影響實際的線程執行順序。換句話說,對于完全相同的代碼和數據,程序的運行邏輯和結果與用戶選擇讓程序從斷點處繼續向后執行的時機有關,這使得對程序的調試具有了不確定性。
- Apache Spark 2.x Machine Learning Cookbook
- 跟老齊學Python:輕松入門
- Bootstrap 4:Responsive Web Design
- Java編程的邏輯
- Windows內核編程
- 微信小程序開發與實戰(微課版)
- Fast Data Processing with Spark(Second Edition)
- UI設計全書(全彩)
- Django實戰:Python Web典型模塊與項目開發
- OpenCV 3 Blueprints
- C++從入門到精通(第6版)
- 零基礎學C++(升級版)
- 進入IT企業必讀的324個Java面試題
- 深度學習入門:基于Python的理論與實現
- Mastering ASP.NET Core 2.0