GNU Debugger (GDB) 是標準的 GNU 除錯工具。在使用 GDB 之前,請先使用 gcc/g++ 編譯器 (Compiler) 的 -g 參數編譯您想除錯的 C/C++ 程式。範例:
$ g++ foo.cpp -o foo -std=c++11 -Og -g3 -v -Wall -Wextra -Wpedantic # g0 | g1 | g | g3:產生除錯資訊,數字愈大層級愈高,預設層級為 2
接著便能使用 GDB 進行除錯。承上例:
$ gdb foo
常見的 GDB 指令如下:
(gdb) run | r # 執行程式 (gdb) breakpoint | break | bre | b [Line] # 設定中斷點 (gdb) next | n # 執行下一行,不進入副程式 (gdb) step | s # 執行下一行,會進入副程式 (gdb) continue | cont | c # 繼續執行 (gdb) print | p [Variable] # 顯示變數內容 (gdb) list | l [Line] # 顯示程式碼 (gdb) backtrace | bt # 顯示所有堆疊區塊 (gdb) help | h [Command] # 顯示說明 (gdb) kill | k # 結束程式 (gdb) quit | q # 離開 GDB
若您開發的是一個多執行緒 (Multithreading) 的程式,則 GDB 預設只會顯示當前執行緒的資訊。若您想查看其他執行緒的資訊,您可以在您想執行的指令前加上 thread apply [Thread ID] (或 thread apply all),便能針對特定 (或全部) 的執行緒進行除錯。
GDB 還可以用來除錯其他程式語言,例如 Python。雖然 Python 已經提供了 PDB 除錯工具,但仍有一些情況,例如 Segmentation Fault,應該使用 GDB 比較合適。使用 GDB 來除錯 Python 程式並不難,您可以參考 這篇教學。