12.6 常見 GNU Debugger (GDB) 指令介紹

  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 程式並不難,您可以參考 這篇教學