gdb

References

🔮 IMPORTANT
如果要使用 GDB 對 C 程式進行 debug,
需要在編譯時添加 -g 參數:gcc main.c -g -o main
debug:gdb ./main
🚨 CAUTION : Windows 64-bits
堆疊:由位址高至低放入元素或集合
集合:由位址低到高放入元素 (集合指的是陣列、結構)
元素:由位址高至低放入位元組 (小端序)
打印位址:該元素或集合的最低位址
📗 TIP
在 Windows 平台要下指令 set editing off 才能使用 backspace 鍵。
📗 TIP
按下 Enter 鍵表示執行上個指令。

Options

  • -q:安靜
  • --args:command line args
  • -tui:TUI (Text User Interface)

    也就是那些在 CLI 上,但長得像 GUI 的介面 (由文字構成)

Commands

Command Shorthand Description
help h 顯示指令簡短說明。
(例:help breakpoint)
file 執行 gdb 期間載入 debug 檔。等同於一開始在 CMD 的 gdb filename
run r 執行程式,或從頭再執行程式。
(📗 TIP : 可將 command line args 傳給程式)
kill 中止程式的執行。
backtrace bt 顯示程式呼叫的堆疊 (stack)。顯示出所有上層 frame 資訊。
print p 印出變數內容。
(例:print i 印出變數 i 的內容)
list l 印出程式碼,若編譯時未加上 -g 參數,該指令將無作用。
whatis 印出變數的型態。
(例:whatis i 印出變數 i 的型態)
examine x 記憶體視圖。自起點位址由低至高查看視圖。
(例:x/12bx &i
12bx: 視圖範圍 12 Bytes、以 16 進位表示
&i: 起點位址,此處提供變數 i 的位址)
break b 設定 breakpoint。
(執行會停在 breakpoint 的前一行)
(接著印的行號表示接下來要執行的那行)
(可單檔案,如:b 6;可跨檔案,如:b hello.c:6)
continue c 繼續執行,與 breakpoint 搭配使用。
condition 條件中斷,與 breakpoint 搭配使用。詳見此文
frame 顯示當前 frame 資訊,包括執行的行數、函數名稱及傳入的參數。
next n 單步執行,不進入函數內部。
step s 單步執行,若遇到函數會進入函數內部。
up 移到上一層 frame 並顯示其資訊。up 2 移到上兩層 frame。
down 移到下一層 frame 並顯示其資訊。
info i 顯示特定資訊。
(例:info break 顯示 breakpoint,info line 查看程式停在哪一行)
display 追蹤變數 (每次中斷時印出變數內容)。
watch 追蹤變數 (內容有變時時印出變數內容)。
disable 暫時關閉某個 breakpoint 或 display 功能。
enable 啟用被 disable 暫時關閉的功能。
clear 刪除某個 breakpoint。
attach 載入已執行中的程式以進行除錯,PID 可由 ps 指令取得。
detach 釋放已 attach 的程式。
shell 執行 Shell 指令。
(📗 TIP : 也就是說你可以藉由這個指令清空 terminal,如:shell clear)
quit 離開 GDB,或按 Ctrl+C
set 設定變數。
(例如:set $ptr = &list[2],變數一如既往,能進行運算或 dereference)