gdb 常用指令備忘錄
gdb <ExeFile>
-q 啟動時不要印版本訊息
file <Exefile> 指定debug的執行檔
set var <var>=<xx> 設var等於xx
set args <para> 設定main()參數
show args 顯示args的內容
layout src 分割視窗顯示程式碼
set listsize <n> 設定使用list指令一次列出n行
start 執行程式,停在main()的第一行
r (run) 執行程式
n (next)執行下一列,不會進入call funtion()
s (step)執行下一步,會進入call funtion()
c (continue)執行到下一個中斷點停止
u (until) 跑完迴圈
按 [Enter] 可重覆執行上個指令
l (list) 列出當前位置的上下 5 行的程式碼
l <n> 列出第n行上下 5 行的程式碼
l <n,m> 列出第n~m行的程式碼
l <FuncName> 列出函數程式碼
p <var> (print)查看變數的內容
p <var>[n]@m 查看陣列索引n~m的內容
p *argv@argc 查看 main() 函式裡參數內容
p <var>=<xx> 設var等於xx
p <func> 查看function位址
whatis <var> 查看變數的型態
x/s <*var> 查看指標所指的字串
b <n> (breakpoint)設中斷點在第n行
b <FuncName> 設中斷點在某function
b <n> if i==5 設定條件中斷點
watch <var> 觀察某個變數的內容
i <b> (info)查看中斷點訊息(和command)
i variables 列出目前scope所可見的global和local變數
i locals 查看所有區域變數的內容
i frame
display 每次遇到中斷時,顯示變數的內容
display <var>
undisplay 關閉自動顯示變數的內容
ena (enable) 暫時開啟某功能
dis <display> <2> (disable) 暫時取消顯示第二個變數的內容
dis <b> <2> 暫時取消編號2的中斷點
d <n> (delete) = clear 刪除編號n的中斷點
bt <n>(backtrace) 追蹤堆疊,顯示上層所有 frame 的簡略資訊
f (frame) 顯示正在執行的行數、副程式名稱、及其所傳送的參數等等
f <n> 顯示上n層的 frame 訊息caller
up <n> 回到上n層的frame
do (down)跳到下層的frame
ret (return)終止執行該function,回上一層frame的呼叫點
fin (finish)執行完該function,回上一層frame的呼叫點
void foo2() { ... //frame 0 目前執行到這邊 } void foo1() { foo2 //frame 1 } main() { foo1(); //frame 2 }
command <n> 第n個中斷點時,執行指令動作
Type commands for when breakpoint 1 is hit, one per line. End with a line saying just "end". >p i # 顯示 i 的內容 >p a[i] # 顯示 a [i] >c # 然後續繼執行 >end # 輸入完成
attach <pid> debug一個已經正在執行的程式
detach
shell <cmd> 執行終端機指令
Kill 結束正在debug的程式
q 離開gdb
help <cmd> 查詢指令
strip ExeFile 清除程式debug訊息
參考網址:
1. Debugging with GDB (入門篇) - Study-Area