Linux下C編程基礎之:gdb調試器
3.4.2gdb基本命令
gdb的命令可以通過(guò)查看help進(jìn)行查找,由于gdb的命令很多,因此gdb的help將其分成了很多種類(lèi)(class),用戶(hù)可以通過(guò)進(jìn)一步查看相關(guān)class找到相應命令,如下所示:
(gdb)help
Listofclassesofcommands:
aliases--Aliasesofothercommands
breakpoints--Makingprogramstopatcertainpoints
data--Examiningdata
files--Specifyingandexaminingfiles
internals--Maintenancecommands
…
Typehelpfollowedbyaclassnameforalistofcommandsinthatclass.
Typehelpfollowedbycommandnameforfulldocumentation.
Commandnameabbreviationsareallowedifunambiguous.
上述列出了gdb各個(gè)分類(lèi)的命令,注意底部的加粗部分說(shuō)明其為分類(lèi)命令。接下來(lái)可以具體查找各分類(lèi)的命令,如下所示:
(gdb)helpdata
Examiningdata.
Listofcommands:
call--Callafunctionintheprogram
deletedisplay--Cancelsomeexpressionstobedisplayedwhenprogramstops
deletemem--Deletememoryregion
disabledisplay--Disablesomeexpressionstobedisplayedwhenprogramstops
…
Typehelpfollowedbycommandnameforfulldocumentation.
Commandnameabbreviationsareallowedifunambiguous.
若用戶(hù)想要查找call命令,就可鍵入“helpcall”。
(gdb)helpcall
Callafunctionintheprogram.
Theargumentisthefunctionnameandarguments,inthenotationofthe
currentworkinglanguage.Theresultisprintedandsavedinthevalue
history,ifitisnotvoid.
當然,若用戶(hù)已知命令名,直接鍵入“help[command]”也是可以的。
gdb中的命令主要分為以下幾類(lèi):工作環(huán)境相關(guān)命令、設置斷點(diǎn)與恢復命令、源代碼查看命令、查看運行數據相關(guān)命令及修改運行參數命令。以下就分別對這幾類(lèi)命令進(jìn)行講解。
1.工作環(huán)境相關(guān)命令
gdb中不僅可以調試所運行的程序,而且還可以對程序相關(guān)的工作環(huán)境進(jìn)行相應的設定,甚至還可以使用shell中的命令進(jìn)行相關(guān)的操作,其功能極其強大。gdb常見(jiàn)工作環(huán)境相關(guān)命令如表3.11所示。
表3.11 gdb工作環(huán)境相關(guān)命令
命令格式 | 含義 |
setargs運行時(shí)的參數 | 指定運行時(shí)參數,如setargs2 |
showargs | 查看設置好的運行參數 |
Pathdir | 設定程序的運行路徑 |
showpaths | 查看程序的運行路徑 |
setenvironmentvar[=value] | 設置環(huán)境變量 |
showenvironment[var] | 查看環(huán)境變量 |
cddir | 進(jìn)入dir目錄,相當于shell中的cd命令 |
Pwd | 顯示當前工作目錄 |
shellcommand | 運行shell的command命令 |
2.設置斷點(diǎn)與恢復命令
gdb中設置斷點(diǎn)與恢復的常見(jiàn)命令如表3.12所示。
表3.12 gdb設置斷點(diǎn)與恢復相關(guān)命令
命令格式 | 含義 |
Infob | 查看所設斷點(diǎn) |
break[文件名:]行號或函數名條件表達式> | 設置斷點(diǎn) |
tbreak[文件名:]行號或函數名條件表達式> | 設置臨時(shí)斷點(diǎn),到達后被自動(dòng)刪除 |
delete[斷點(diǎn)號] | 刪除指定斷點(diǎn),其斷點(diǎn)號為“infob”中的第一欄。若缺省斷點(diǎn)號則刪除所有斷點(diǎn) |
disable[斷點(diǎn)號] | 停止指定斷點(diǎn),使用“infob”仍能查看此斷點(diǎn)。同delete一樣,若缺省斷點(diǎn)號則停止所有斷點(diǎn) |
enable[斷點(diǎn)號] | 激活指定斷點(diǎn),即激活被disable停止的斷點(diǎn) |
condition[斷點(diǎn)號]條件表達式> | 修改對應斷點(diǎn)的條件 |
ignore[斷點(diǎn)號]num> | 在程序執行中,忽略對應斷點(diǎn)num次 |
Step | 單步恢復程序運行,且進(jìn)入函數調用 |
Next | 單步恢復程序運行,但不進(jìn)入函數調用 |
Finish | 運行程序,直到當前函數完成返回 |
C | 繼續執行函數,直到函數結束或遇到新的斷點(diǎn) |
設置斷點(diǎn)在gdb的調試中非常重要,下面著(zhù)重講解gdb中設置斷點(diǎn)的方法。
gdb中設置斷點(diǎn)有多種方式:其一是按行設置斷點(diǎn);另外還可以設置函數斷點(diǎn)和條件斷點(diǎn)。下面具體介紹后兩種設置斷點(diǎn)的方法。
①函數斷點(diǎn)。
gdb中按函數設置斷點(diǎn)只需把函數名列在命令“b”之后,如下所示:
(gdb)btest.c:sum(可以簡(jiǎn)化為bsum)
Breakpoint1at0x80484ba:filetest.c,line16.
(gdb)infob
NumTypeDispEnbAddressWhat
1breakpointkeepy0x080484bainsumattest.c:16
要注意的是,此時(shí)的斷點(diǎn)實(shí)際是在函數的定義處,也就是在16行處(注意第16行還未執行)。
②條件斷點(diǎn)。
gdb中設置條件斷點(diǎn)的格式為:b行數或函數名if表達式。具體實(shí)例如下所示:
(gdb)b8ifi==10
Breakpoint1at0x804848c:filetest.c,line8.
(gdb)infob
NumTypeDispEnbAddressWhat
1breakpointkeepy0x0804848cinmainattest.c:8
stoponlyifi==10
(gdb)r
Startingprogram:/home/yul/test
Thesumof1-mis1275
Breakpoint1,main()attest.c:9
9n+=i;
(gdb)pi
$1=10
可以看到,該例中在第8行(也就是運行完第7行的for循環(huán))設置了一個(gè)“i==0”的條件斷點(diǎn),在程序運行之后可以看出,程序確實(shí)在i為10時(shí)暫停運行。
3.gdb中源碼查看相關(guān)命令
在gdb中可以查看源碼以方便其他操作,它的常見(jiàn)相關(guān)命令如表3.13所示。
表3.13 gdb源碼查看相關(guān)相關(guān)命令
命令格式 | 含義 |
list行號>|函數名> | 查看指定位置代碼 |
file[文件名] | 加載指定文件 |
forward-search正則表達式 | 源代碼的前向搜索 |
reverse-search正則表達式 | 源代碼的后向搜索 |
dirDIR | 將路徑DIR添加到源文件搜索的路徑的開(kāi)頭 |
showdirectories | 顯示源文件的當前搜索路徑 |
infoline | 顯示加載到gdb內存中的代碼 |
4.gdb中查看運行數據相關(guān)命令
gdb中查看運行數據是指當程序處于“運行”或“暫停”狀態(tài)時(shí),可以查看的變量及表達式的信息,其常見(jiàn)命令如表3.14所示。
表3.14 gdb查看運行數據相關(guān)命令
命令格式 | 含義 |
print表達式|變量 | 查看程序運行時(shí)對應表達式和變量的值 |
xn/f/u> | 查看內存變量?jì)热?。其中n為整數表示顯示內存的長(cháng)度,f表示顯示的格式,u表示從當前地址往后請求顯示的字節數 |
display表達式 | 設定在單步運行或其他情況中,自動(dòng)顯示的對應表達式的內容 |
backtrace | 查看當前棧的情況,即可以查到哪些被調用的函數尚未返回 |
linux相關(guān)文章:linux教程
評論