傳入命令行參數(shù)
gdb program --args arglist
(gdb) set args arglist
(gdb) run arglist
info常用
info args|locals|line
多進(jìn)程調(diào)試
查看系統(tǒng)默認(rèn)的follow-fork-mode 和 detach-on-fork:
show follow-fork-mode
show detach-on-fork
設(shè)置follow-fork-mode 和 detach-on-fork:
set follow-fork-mode [parent|child]
set detach-on-fork [on|off]
運(yùn)行程序,查詢正在調(diào)試的進(jìn)程:
顯示GDB調(diào)試的所有inferior蕉扮,GDB會(huì)為他們分配ID。其中帶有*的進(jìn)程是正在調(diào)試的inferior。( GDB將每一個(gè)被調(diào)試程序的執(zhí)行狀態(tài)記錄在一個(gè)名為inferior的結(jié)構(gòu)中。一般情況下一個(gè)inferior對(duì)應(yīng)一個(gè)進(jìn)程,每個(gè)不同的inferior有不同的地址空間含懊。inferior有時(shí)候會(huì)在進(jìn)程沒有啟動(dòng)的時(shí)候就存在。)
info inferiors
切換調(diào)試的進(jìn)程:
inferior <infer number>
斷點(diǎn)查看:
info b
使中斷失效(斷點(diǎn)仍然存在)或有效:
disable <b number>
enable <b number>
刪除斷點(diǎn)
clear : 刪除程序中所有的斷點(diǎn)
clear 行號(hào) : 刪除這行的斷點(diǎn)
clear 函數(shù)名 : 刪除該函數(shù)的斷點(diǎn)
delete b_id1 b_id2 ... : 刪除指定編號(hào)的斷點(diǎn)
觀察點(diǎn)(WatchPoint):
watch <expr> 變量發(fā)生變化時(shí)中斷
rwatch <expr> 變量被讀時(shí)中斷
awatch <expr> 變量值被讀或被寫時(shí)中斷
反匯編:
disassemble /rm
指示顯示匯編指令的同時(shí),顯示相應(yīng)的程序源碼范抓;/r指示顯示十六進(jìn)制的計(jì)算機(jī)指令(raw instruction)。
查看寄存器
display/i $pc
(gdb) i r
(gdb) i r a # 查看所有寄存器(包括浮點(diǎn)食铐、多媒體)
(gdb) i r esp
(gdb) i r pc
數(shù)組打印
set print array [on|off]
show print array
打開數(shù)組顯示匕垫,打開后當(dāng)數(shù)組顯示時(shí),每個(gè)元素占一行虐呻,如果不打開的話象泵,每個(gè)元素則以逗號(hào)分隔。這個(gè)選項(xiàng)默認(rèn)是關(guān)閉的斟叼。
set print elements
show print array
如果你的數(shù)組太大了偶惠,那么就可以指定一個(gè)來指定數(shù)據(jù)顯示的最大長(zhǎng)度,當(dāng)?shù)竭_(dá)這個(gè)長(zhǎng)度時(shí)朗涩,GDB就不再往下顯示了忽孽。如果設(shè)置為0,則表示不限制谢床。
GDB環(huán)境變量:
2 void main()
3 {
4 int a[10] = {0};
5 a[1] =8;
6 a[2] =4;
7 a[3] = 9;
8
9 }
只用敲回車扒腕,重復(fù)執(zhí)行上一條語(yǔ)句,環(huán)境變量會(huì)自動(dòng)累加萤悴,從而完成逐個(gè)輸出的功能
gdb的gui調(diào)試窗口:
layout [src |asm|split]
ctrl-x a (按住Ctrl+x后松開再按a瘾腰,以下快捷鍵操作方式相同)
ctrl-x 1 使TUI只顯示一個(gè)窗口
ctrl-x 2 使TUI顯示兩個(gè)窗口
layout next 切換上一個(gè)視圖
fs n 切換激活的窗口
gdbgui
將調(diào)試的gui在瀏覽器中顯示
https://gdbgui.com/
安裝gdbgui
pip install gdbgui
使用
gdbgui -p 10001 -r "a.out"
-p 10001表示設(shè)定的端口是10001,-r 表示是遠(yuǎn)程remote調(diào)試模式(即調(diào)試界面不在Linux機(jī)上)