除錯

維基百科,自由的百科全書
(重新導向自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]

  • GDB(GNU Debugger):Unix/Linux系統上最廣泛使用的命令列除錯器,支援CC++等多種語言。
  • LLDB:LLVM專案中的除錯器,與GDB高度相容,Xcode的預設除錯器。
  • Microsoft Visual Studio除錯器:Windows平台整合除錯環境,支援斷點、即時窗口IntelliTrace等。
  • Valgrind:主記憶體除錯和效能分析工具集,主要用於檢測記憶體流失和非法主記憶體訪問。
  • AddressSanitizer(ASan):LLVMGCC編譯器內建的快速主記憶體錯誤檢測工具。
  • Chrome DevTools:瀏覽器的開發者工具集,用於除錯JavaScriptHTMLCSS
  • 核心除錯器:如WinDbg(Windows)、KDbg(Linux)、DTrace(macOS/Solaris)。

參見[編輯]

參考文獻[編輯]

  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].