除錯
(重新導向自Debugging)
| 「除錯」的各地常用名稱 | |
|---|---|
| 中國大陸 | 調試 |
| 臺灣 | 除錯、偵錯 |
| 軟體開發 |
|---|
| 核心行動 |
| 範式與模式 |
| 方法論與框架 |
| 支援行為 |
| 實踐 |
| 工具 |
| 標準與知識體系 |
除錯或偵錯(英語:Debugging)是發現和減少電腦程式、軟體或軟體系統中程式錯誤的過程[1]。
除錯是軟體開發過程中的重要環節。除錯技術包括互動式除錯、紀錄檔檔案分析、靜態分析、核心轉儲分析以及效能分析等。許多程式語言和整合式開發環境提供了專門的除錯工具[2]。
詞源與歷史[編輯]
「除錯」(debugging)一詞源自電腦科學早期的著名典故。1947年,葛麗絲·霍普(Grace Hopper)在哈佛馬克二號電腦的繼電器中發現了一隻飛蛾,導致電腦故障。她將這隻飛蛾貼在紀錄檔中,並註明「First actual case of bug being found」[3]。「bug」一詞此前已在工程領域用於指代缺陷,但霍普的發現使其在電腦領域廣泛流行。
早期的除錯手段十分原始。程式設計師通過機器語言、撥動開關和檢查主記憶體指示燈來排查問題。1960年代後,組合語言和高階語言的出現催生了早期的除錯工具,如FORTAN的流程跟蹤。1970年代,Unix作業系統引入了adb和sdb等命令列除錯器。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):記錄程式執行軌跡,允許開發者在時間上回退以觀察變數變化過程。
除錯工具[編輯]
- GDB(GNU Debugger):Unix/Linux系統上最廣泛使用的命令列除錯器,支援C、C++等多種語言。
- LLDB:LLVM專案中的除錯器,與GDB高度相容,Xcode的預設除錯器。
- Microsoft Visual Studio除錯器:Windows平台整合除錯環境,支援斷點、即時窗口、IntelliTrace等。
- Valgrind:主記憶體除錯和效能分析工具集,主要用於檢測記憶體流失和非法主記憶體訪問。
- AddressSanitizer(ASan):LLVM和GCC編譯器內建的快速主記憶體錯誤檢測工具。
- Chrome DevTools:瀏覽器的開發者工具集,用於除錯JavaScript、HTML和CSS。
- 核心除錯器:如WinDbg(Windows)、KDbg(Linux)、DTrace(macOS/Solaris)。
參見[編輯]
參考文獻[編輯]
- ^ 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.0 2.1 2.2 McConnell, S. Code Complete 2nd. Microsoft Press. 2004. ISBN 978-0-735-61967-8.
- ^ The First Computer Bug. Naval History and Heritage Command. [2026-05-13].