調試

維基百科,自由的百科全書
(重新導向自Debugging
跳至導覽 跳至搜尋
「調試」的各地常用名稱
中國大陸調試
臺灣除錯、偵錯

除錯偵錯(英語:Debugging)是發現和減少計算機程序軟件或軟體系統中程序錯誤的過程[1]

調試是軟件開發過程中的重要環節。調試技術包括交互式調試、日誌文件分析、靜態分析核心轉儲分析以及性能分析等。許多編程語言和集成開發環境提供了專門的調試工具[2]

詞源與歷史[編輯]

「調試」(debugging)一詞源自計算機科學早期的著名典故。1947年,葛麗絲·霍普(Grace Hopper)在哈佛馬克二號計算機的繼電器中發現了一隻飛蛾,導致計算機故障。她將這隻飛蛾貼在日誌中,並註明「First actual case of bug being found」[3]。「bug」一詞此前已在工程領域用於指代缺陷,但霍普的發現使其在計算機領域廣泛流行。

早期的調試手段十分原始。程序員通過機器語言、撥動開關和檢查內存指示燈來排查問題。1960年代後,匯編語言高級語言的出現催生了早期的調試工具,如FORTAN的流程跟蹤。1970年代,Unix操作系統引入了adbsdb等命令行調試器。1990年代以來,隨着圖形用戶界面集成開發環境的普及,調試工具逐步集成到IDE中,支持斷點設定、變量監視和單步執行等功能[1]

程序錯誤的類型[編輯]

程序錯誤(bug)可按其性質和影響分類[2]

  • 語法錯誤(Syntax Error):違反編程語言的語法規則,通常在編譯階段被檢測到。
  • 運行時錯誤(Runtime Error):程序在執行過程中出現的錯誤,如空指針解引用、除零錯誤、段錯誤
  • 邏輯錯誤(Logic Error):程序能夠運行但產生錯誤結果,是最難排查的類型。
  • 內存錯誤:包括內存泄漏緩衝區溢出懸空指針釋放後使用(use-after-free)。
  • 並發錯誤:在多線程或多進程環境中出現,包括競態條件死鎖活鎖
  • 語義錯誤:代碼在語法上正確,但未能實現預期的語義含義。

調試技術[編輯]

調試技術涵蓋從手動檢查到自動化分析的多種方法[1]

  • 打印調試(Print Debugging):在代碼中插入輸出語句(如printf、console.log)來跟蹤變量值和程序流程。是最簡單也是最廣泛使用的調試手段。
  • 交互式調試(Interactive Debugging):使用調試器設定斷點(breakpoint)、監視點(watchpoint),逐行或逐指令執行代碼,檢查變量和調用棧。主流IDE內置的調試器均支持此功能。
  • 靜態分析(Static Analysis):在不運行代碼的情況下通過lint類工具或編譯器的警告信息檢測潛在問題。
  • 核心轉儲分析(Core Dump Analysis):程序崩潰後分析保存的內存映像,定位崩潰位置和原因。
  • 二分查找法(Binary Search / Delta Debugging):通過反覆將可疑代碼範圍減半來縮小問題定位區域。
  • 斷言(Assertion):在代碼中插入斷言語句,在運行時檢查條件是否滿足,快速發現邏輯錯誤。
  • 橡皮鴨調試法(Rubber Duck Debugging):向橡皮鴨或其他聽眾逐行解釋代碼,在敘述過程中發現自己的邏輯錯誤。
  • 遠程調試(Remote Debugging):調試在另一台機器或嵌入式設備上運行的程序,常用於嵌入式系統和服務器端開發。
  • 逆向執行調試(Reverse / Time Travel Debugging):記錄程序執行軌跡,允許開發者在時間上回退以觀察變量變化過程。

調試工具[編輯]

常用的調試工具包括[1][2]

參見[編輯]

參考文獻[編輯]

  1. ^ 1.0 1.1 1.2 1.3 Zeller, A. Why Programs Fail: A Guide to Systematic Debugging 2nd. Morgan Kaufmann. 2009. ISBN 978-0-123-74515-6. 
  2. ^ 2.0 2.1 2.2 McConnell, S. Code Complete 2nd. Microsoft Press. 2004. ISBN 978-0-735-61967-8. 
  3. ^ The First Computer Bug. Naval History and Heritage Command. [2026-05-13].