1. 幫助
選項(xiàng)
作用
help
列出所有命令分類
help class
列出分類class中的命令列表
help command
顯示命令command的使用說明
2. 啟動(dòng)
選項(xiàng)
作用
gdb program
開始調(diào)試program
gdb -command=c program
開始調(diào)試progream滑沧,c是本項(xiàng)目的啟動(dòng)文件
gdb program core
調(diào)試program,core作為credump文件
加載程序時(shí)帅涂,gdb嘗試加載啟動(dòng)文件。有兩個(gè)啟動(dòng)文件,一個(gè)是~/.gitinit,屬于當(dāng)前用戶笆凌,另一個(gè)屬于特定項(xiàng)目,用-command選項(xiàng)指定时甚。
~/.gitinit是在加載程序前加載的隘弊,適合一般用途;-command指定的啟動(dòng)文件是在加載程序后加載的荒适,所以特定于項(xiàng)目梨熙,如設(shè)置斷點(diǎn)等。
3. 運(yùn)行程序
選項(xiàng)
作用
run arglist
設(shè)置參數(shù)列表為arglist刀诬,并運(yùn)行程序
run
用當(dāng)前的參數(shù)列表運(yùn)行程序
set args [arglist]
設(shè)置參數(shù)列表為arglist咽扇。如果沒指定arglist,則清空參數(shù)列表
show args
顯示當(dāng)前參數(shù)列表
run ... <inf >outf
輸入陕壹、輸出分別重定向到inf质欲,outf
kill
殺死運(yùn)行中的程序
set env var string
設(shè)置環(huán)境變量var的值為string
show env
列出所有環(huán)境變量
show env var
列出環(huán)境變量var的值
unset env var
刪除環(huán)境變量var
4. 調(diào)試目標(biāo)
選項(xiàng)
作用
target type targ
連接到指定類型typed的目標(biāo)targ,如遠(yuǎn)程機(jī)器
attach process
掛接到指定進(jìn)程
detach
脫離(放棄控制)當(dāng)前進(jìn)程
5. 工作文件
選項(xiàng)
作用
info sharedlib
列出當(dāng)前加載的動(dòng)態(tài)庫
6. 符號(hào)表
選項(xiàng)
作用
info address s
顯示符號(hào)s的地址
info func reg
顯示函數(shù)reg的原型糠馆。regexpr是正則表達(dá)式
info var reg
顯示全局變量reg的定義
whatis expr
顯示expr的類型嘶伟。expr可以是變量或類型
ptype expr
顯示expr的類型。信息比whatis更詳細(xì)
7. Shell命令
選項(xiàng)
作用
cd dir
工作目錄改成dir
pwd
顯示工作目錄
make
調(diào)用make
shell cmd
運(yùn)行Shell命令cmd
8. 斷點(diǎn) breakpoint又碌、監(jiān)視點(diǎn) watchpoint
選項(xiàng)
作用
break [file:] line
在文件file九昧、行l(wèi)ine設(shè)置斷點(diǎn)。b等同于break毕匀。
break [file:] function
在文件file铸鹰、函數(shù)function設(shè)置斷點(diǎn)
break ... if expr
設(shè)置條件斷點(diǎn),如果expr非0皂岔,則停止
cond n [expr]
給斷點(diǎn)n設(shè)置條件蹋笼,如果沒指定expr,則清除條件凤薛。
commands n
給斷點(diǎn)n設(shè)置命令列表姓建。
tbreak ...
設(shè)置臨時(shí)斷點(diǎn),一次有效
info break
顯示所有斷點(diǎn)
clear [file:] line
清除文件file缤苫、行l(wèi)ine的斷點(diǎn)速兔。
clear [file:] function
清除文件file、函數(shù)function的斷點(diǎn)
delete [n]
刪除斷點(diǎn)n活玲。如果沒指定n涣狗,清除所有斷點(diǎn)谍婉。
disable [n]
禁用斷點(diǎn)n。如果沒指定n镀钓,禁用所有斷點(diǎn)穗熬。
enable [n]
啟用斷點(diǎn)n。如果沒指定n丁溅,啟用所有斷點(diǎn)唤蔗。
watch expr
設(shè)置監(jiān)視點(diǎn),如果expr變化窟赏,則停止
info watch
顯示所有監(jiān)視點(diǎn)
斷點(diǎn)妓柜、監(jiān)視點(diǎn)列表
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040087b in main(int, char**) at /home/ron/dev/cmake/demo/main.cpp:24
2 hw watchpoint keep y xyz
Num: 編號(hào)
Type: 類型⊙那睿可以是breakpoint棍掐、watchpoint、或catchpoint拷况。
Disp: 部署Disposition作煌,指出gdb下次暫停時(shí)怎樣處理該斷點(diǎn)∽荩可以是keep(保持)粟誓,del(刪除) 或dis(禁用)。
Enb: 當(dāng)前起意,可以是y(啟用)或n(禁用)努酸。
Address: breakpoint在內(nèi)存中的位置。watchpoint這項(xiàng)為空杜恰。
What: breakpoint在源代碼中的位置获诈。watchpoint這項(xiàng)是變量或表達(dá)式名。
如下是設(shè)置條件斷點(diǎn)的一個(gè)例子:
(gdb) break 21 if x == 0
(gdb) info break
7 breakpoint keep y 0x00000000004007f6 in main(int, char**) at /home/ron/dev/cmake/demo/main.cpp:21
stop only if x == 0
(gdb) cond 7 x < 3
條件斷點(diǎn)的 if 部分可以包含自定義函數(shù):
break 21 if test_var(x)
也可以包含庫函數(shù)心褐,如:
break 21 if strlen(mystring) > 1
給斷點(diǎn)設(shè)置命令列表的一個(gè)例子如下:
(gdb) commands 2
Type commands for breakpoint(s) 2, one per line.
End with a line saying just "end".
>silent
>printf "x is %d.\n", x
>end
(gdb) info b
Num Type Disp Enb Address What
2 breakpoint keep y 0x00000000004008c9 in main(int, char**) at /home/ron/dev/cmake/demo/main.cpp:33
breakpoint already hit 2 times
silent
printf "x is %d.\n", x
監(jiān)視點(diǎn)結(jié)合了斷點(diǎn)和變量檢查的概念舔涎。基本的形式是: 當(dāng)變量值發(fā)生變化時(shí)逗爹,暫停程序執(zhí)行亡嫌。
(gdb) watch z
更好的方法是指定條件表達(dá)式。如下的形式是:當(dāng)z的值第一次大于28時(shí)掘而,暫停執(zhí)行挟冠。
(gdb) watch (z>28)
監(jiān)視點(diǎn)指定的變量要處于作用域內(nèi)。一旦離開作用域袍睡,監(jiān)視點(diǎn)被刪除知染。
9. 瀏覽棧幀
選項(xiàng)
作用
backtrace
顯示棧的所有幀。bt等同于backtrace斑胜。
frame n
設(shè)置幀n為當(dāng)前幀
up
設(shè)置父幀為當(dāng)前幀
down
設(shè)置子幀為當(dāng)前幀
frame
顯示當(dāng)前幀
info frame
顯示當(dāng)前幀的局部變量控淡、形參等信息
info args
顯示當(dāng)前幀的參數(shù)
info locals
顯示當(dāng)前幀的本地變量
info reg
顯示當(dāng)前幀的寄存器
棧幀(stack frame)中保存與函數(shù)調(diào)用關(guān)聯(lián)的運(yùn)行時(shí)信息嫌吠。每個(gè)幀保存該層函數(shù)的局部變量、形參掺炭、調(diào)用函數(shù)的位置等辫诅。正在執(zhí)行的函數(shù)幀編號(hào)為0,其父幀編號(hào)依次為1涧狮,以此類推炕矮。
10. 執(zhí)行控制
選項(xiàng)
作用
continue
繼續(xù)執(zhí)行。 c等同與continue
next
單步執(zhí)行者冤,跳過函數(shù)調(diào)用吧享。n等同與next
step
單步執(zhí)行,進(jìn)入函數(shù)調(diào)用譬嚣。s等同與step
until [location]
執(zhí)行到 location 指定的位置
finish
執(zhí)行到當(dāng)前幀返回
signal sig
向進(jìn)程發(fā)送信號(hào)signal并繼續(xù)執(zhí)行
(gdb) signal SIGINT
也可以是數(shù)字,如:
(gdb) signal 2
11. 顯示變量
選項(xiàng)
作用
set var = expr
變量var賦值為expr
print [/f] expr
按照 /f 指定的格式顯示expr
x [/Nuf] addr
按 /Nuf 指定的格式顯示地址addr處的數(shù)據(jù)
display [/f] expr
每次停止執(zhí)行時(shí)遭垛,自動(dòng)顯示expr的值
undisplay n
刪除display變量
info display
列出所有display變量
printf
類似C函數(shù)printf()的用法
disassem [addr]
顯示匯編代碼
print /f expr 中的 f 可以是如下值之一:
x 十六進(jìn)制
d 有符號(hào)十進(jìn)制
u 無符號(hào)十進(jìn)制
a 地址
c 字符
f 浮點(diǎn)數(shù)
s NULL結(jié)尾的字符串
x [/Nuf] expr 中尼桶, Nuf依次指定多個(gè)單元 (N)、單元大小(u)锯仪、和單位類型(f)泵督。
b byte,1個(gè)字節(jié)
h halfword庶喜,2個(gè)字節(jié)
w words小腊,4個(gè)字節(jié)
g giant word,8個(gè)字節(jié)
(gdb) printf "x is %d.\n", x
printf 一般用于編寫斷點(diǎn)命令久窟、宏這些擴(kuò)展功能秩冈。
12. 瀏覽源代碼
選項(xiàng)
作用
list
從當(dāng)前位置開始,列出后面10行源代碼
list line
列出行l(wèi)ine 前后的源代碼斥扛,line可以是[file:]num入问、[file:]function
list -
從當(dāng)前位置開始,列出前面10行源代碼
list f,l
列出從 f 行到 l 行的源代碼
list file:line
列出指定文件的line行稀颁。這個(gè)命令會(huì)切換當(dāng)前源文件
info sources
顯示正在使用的源文件名列表
info source
顯示當(dāng)前源文件名
13. 多線程
選項(xiàng)
作用
info threads
列出所有線程
thread n
切換到指定的線程芬失,n是線程編號(hào)
set scheduler-locking on
只運(yùn)行當(dāng)前線程,鎖住其他線程
set scheduler-locking on step
單步執(zhí)行當(dāng)前線程時(shí)匾灶,鎖住其他線程
set scheduler-locking off
運(yùn)行當(dāng)前線程棱烂,同時(shí)運(yùn)行其他線程
handle SIG32 nostop
讓程序接收到sig32信號(hào)時(shí),不掛起
相關(guān)鏈接
GDB 常用法
GDB 調(diào)試Coredump問題
嵌入式開發(fā)中GDB調(diào)試Coredump問題
嵌入式開發(fā)中GDB串口遠(yuǎn)程調(diào)試
用backtrace()調(diào)試coredump問題
Valgrind memcheck 用法
Address Sanitizer 用法
Program received signal SIG32, Real-time event 32
SIG32 和 SIG33
參考資料
GDB Quick Reference
http://www.scott-webb.co.uk/misc/refcard.pdf
最后編輯于 :2024.03.06 10:01:36
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者