🔮 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 鍵表示執行上個指令。 |
-q
:安靜--args
:command line args-tui
:TUI (Text User Interface)
也就是那些在 CLI 上,但長得像 GUI 的介面 (由文字構成)
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) |