GDB基本命令從打開文件到調(diào)試結(jié)束的教程
GDB基本命令從打開文件到調(diào)試結(jié)束的教程
基于ARM核的芯片具有低功耗、高性能的特點(diǎn),廣泛應(yīng)用于嵌入式Linux產(chǎn)品中,系統(tǒng)內(nèi)核調(diào)試是建立系統(tǒng)軟件平臺(tái)的一個(gè)關(guān)鍵輔助技術(shù)。 接下來是小編為大家收集的GDB基本命令從打開文件到調(diào)試結(jié)束的教程,希望能幫到大家。
GDB基本命令從打開文件到調(diào)試結(jié)束的教程
事前準(zhǔn)備
1 gcc -g -o 將原文件編譯成可以讓gdb調(diào)試的目標(biāo)文件
2 gdb 打開要調(diào)試的目標(biāo)文件
3 set args 設(shè)置參數(shù)
或者run的時(shí)候用run 來實(shí)現(xiàn)
4 show args 參看參數(shù)
5 show environment 查看environment
5 unset env 清除所有環(huán)境變量
6 set environment 來設(shè)置一個(gè)環(huán)境變量VAR1
設(shè)置/刪除斷點(diǎn)
1 info sources 或 list 來查看文件,要不然都不知道應(yīng)該在哪里設(shè)置斷點(diǎn)
2 查看斷點(diǎn) info breakpoints
3 break
4 tbreak 設(shè)置臨時(shí)斷點(diǎn),到達(dá)后被自動(dòng)刪除
5 enable
enable delete
enable once
6 disable
7 delete breakpoints 刪除斷點(diǎn)
或單用delete而不加任何參數(shù)來刪除所有斷點(diǎn)
->斷點(diǎn)進(jìn)階
1 break test.c:5 設(shè)置斷點(diǎn)到指定文件
2 break 在內(nèi)存某一個(gè)位置出暫停
3 break if 來設(shè)置條件斷點(diǎn)
4 condition 對(duì)已存在的斷點(diǎn)附上條件
5 command 可以在第n個(gè)斷點(diǎn)出設(shè)置命令
開始調(diào)試
0 run 程序開始執(zhí)行
1 step or s 單步執(zhí)行
2 next or n非進(jìn)入式單步執(zhí)行,就是說,當(dāng)調(diào)用其他函數(shù)時(shí),不進(jìn)入那個(gè)函數(shù)內(nèi)部
3 finish 一直運(yùn)行到函數(shù)返回
4 until 運(yùn)行到函數(shù)某一行
5 continue or cont 執(zhí)行到下一個(gè)斷點(diǎn)或程序結(jié)束
6 return 改變程序流程,直接結(jié)束當(dāng)前函數(shù),并將指定值返回
設(shè)置變量
set
1 set i = 5 改變程序中一個(gè)變量的值
2 set $i =5 來設(shè)置一個(gè)pdb環(huán)境里自己的變量,該變量獨(dú)立于程序,也就是說只有g(shù)db認(rèn)識(shí)
獲取程序信息
1 監(jiān)視變量
print /fmt 打印信息
fmt格式,有以下幾種
------------------------------
x 十六進(jìn)制
------------------------------
d 十進(jìn)制
------------------------------
u 無符號(hào)數(shù)
------------------------------
o 八進(jìn)制
------------------------------
t 二進(jìn)制
------------------------------
a 十六進(jìn)制打印
------------------------------
c 字符格式
------------------------------
f 浮點(diǎn)數(shù)
------------------------------
2 追蹤變量
watch 追蹤被賦值動(dòng)作 eg. i = 4;
rwatch 追蹤讀動(dòng)作 eg. b = i;
awatch 追蹤所有動(dòng)作
del watchpoint .
info display
display
show display
del display
3 監(jiān)視內(nèi)存
x /
Address可以是內(nèi)存地址或是指針,比如0x8799f000,p,&var
fmt 由三部分組成 NFU,N表示要查看的長(zhǎng)度,U為格式,其中有分為bhwg,分別表示以字節(jié),半字,字,雙字
來顯示。
eg.
(gdb) x argv[0]
0xbfffff61: 0x6d6f682f
(gdb) x /10cb argv[0]
0xbfffff61: 47 '/' 104 'h' 111 'o' 109 'm' 101 'e' 47 '/' 67 'C' 104 'h'
0xbfffff69: 97 'a' 114 'r'
(gdb) x /10tb
12
0xbfffff6b: 01101100 01100101 01110011 00101111
01110111 01101111 01110010 01101011
0xbfffff73: 01110000 01101100
(gdb) x /10th
0xbfffff7f:
0110101101101111 0111010000101111 0110000100000000
01100010000000110001100000000 0110010000000000 0110010100000000 0110011000000000
0xbfffff8f: 0110011100000000 0101011000000000
(gdb)
4 查看總的frame信息
backtrace 或者 bt
說明:frame是函數(shù)調(diào)用時(shí)候所產(chǎn)生的堆棧,存儲(chǔ)函數(shù)被調(diào)用的信息
5 選擇要查看的frame
frame
看了“GDB基本命令從打開文件到調(diào)試結(jié)束的教程”還想看: