新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux下C編程基礎(chǔ)之:gdb調(diào)試器

Linux下C編程基礎(chǔ)之:gdb調(diào)試器

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò) 收藏

本文引用地址:http://2s4d.com/article/257150.htm

3.4.2gdb基本命令

gdb的命令可以通過(guò)查看help進(jìn)行查找,由于gdb的命令很多,因此gdb的help將其分成了很多種類(lèi)(class),用戶(hù)可以通過(guò)進(jìn)一步查看相關(guān)class找到相應(yīng)命令,如下所示:

(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.

當(dāng)然,若用戶(hù)已知命令名,直接鍵入“help[command]”也是可以的。

gdb中的命令主要分為以下幾類(lèi):工作環(huán)境相關(guān)命令、設(shè)置斷點(diǎn)與恢復(fù)命令、源代碼查看命令、查看運(yùn)行數(shù)據(jù)相關(guān)命令及修改運(yùn)行參數(shù)命令。以下就分別對(duì)這幾類(lèi)命令進(jìn)行講解。

1.工作環(huán)境相關(guān)命令

gdb中不僅可以調(diào)試所運(yùn)行的程序,而且還可以對(duì)程序相關(guān)的工作環(huán)境進(jìn)行相應(yīng)的設(shè)定,甚至還可以使用shell中的命令進(jìn)行相關(guān)的操作,其功能極其強(qiáng)大。gdb常見(jiàn)工作環(huán)境相關(guān)命令如表3.11所示。

表3.11 gdb工作環(huán)境相關(guān)命令

命令格式

含義

setargs運(yùn)行時(shí)的參數(shù)

指定運(yùn)行時(shí)參數(shù),如setargs2

showargs

查看設(shè)置好的運(yùn)行參數(shù)

Pathdir

設(shè)定程序的運(yùn)行路徑

showpaths

查看程序的運(yùn)行路徑

setenvironmentvar[=value]

設(shè)置環(huán)境變量

showenvironment[var]

查看環(huán)境變量

cddir

進(jìn)入dir目錄,相當(dāng)于shell中的cd命令

Pwd

顯示當(dāng)前工作目錄

shellcommand

運(yùn)行shell的command命令

2.設(shè)置斷點(diǎn)與恢復(fù)命令

gdb中設(shè)置斷點(diǎn)與恢復(fù)的常見(jiàn)命令如表3.12所示。

表3.12 gdb設(shè)置斷點(diǎn)與恢復(fù)相關(guān)命令

命令格式

含義

Infob

查看所設(shè)斷點(diǎn)

break[文件名:]行號(hào)或函數(shù)名條件表達(dá)式>

設(shè)置斷點(diǎn)

tbreak[文件名:]行號(hào)或函數(shù)名條件表達(dá)式>

設(shè)置臨時(shí)斷點(diǎn),到達(dá)后被自動(dòng)刪除

delete[斷點(diǎn)號(hào)]

刪除指定斷點(diǎn),其斷點(diǎn)號(hào)為“infob”中的第一欄。若缺省斷點(diǎn)號(hào)則刪除所有斷點(diǎn)

disable[斷點(diǎn)號(hào)]

停止指定斷點(diǎn),使用“infob”仍能查看此斷點(diǎn)。同delete一樣,若缺省斷點(diǎn)號(hào)則停止所有斷點(diǎn)

enable[斷點(diǎn)號(hào)]

激活指定斷點(diǎn),即激活被disable停止的斷點(diǎn)

condition[斷點(diǎn)號(hào)]條件表達(dá)式>

修改對(duì)應(yīng)斷點(diǎn)的條件

ignore[斷點(diǎn)號(hào)]num>

在程序執(zhí)行中,忽略對(duì)應(yīng)斷點(diǎn)num次

Step

單步恢復(fù)程序運(yùn)行,且進(jìn)入函數(shù)調(diào)用

Next

單步恢復(fù)程序運(yùn)行,但不進(jìn)入函數(shù)調(diào)用

Finish

運(yùn)行程序,直到當(dāng)前函數(shù)完成返回

C

繼續(xù)執(zhí)行函數(shù),直到函數(shù)結(jié)束或遇到新的斷點(diǎn)

設(shè)置斷點(diǎn)在gdb的調(diào)試中非常重要,下面著重講解gdb中設(shè)置斷點(diǎn)的方法。

gdb中設(shè)置斷點(diǎn)有多種方式:其一是按行設(shè)置斷點(diǎn);另外還可以設(shè)置函數(shù)斷點(diǎn)和條件斷點(diǎn)。下面具體介紹后兩種設(shè)置斷點(diǎn)的方法。

①函數(shù)斷點(diǎn)。

gdb中按函數(shù)設(shè)置斷點(diǎn)只需把函數(shù)名列在命令“b”之后,如下所示:

(gdb)btest.c:sum(可以簡(jiǎn)化為bsum)

Breakpoint1at0x80484ba:filetest.c,line16.

(gdb)infob

NumTypeDispEnbAddressWhat

1breakpointkeepy0x080484bainsumattest.c:16

要注意的是,此時(shí)的斷點(diǎn)實(shí)際是在函數(shù)的定義處,也就是在16行處(注意第16行還未執(zhí)行)。

②條件斷點(diǎn)。

gdb中設(shè)置條件斷點(diǎn)的格式為:b行數(shù)或函數(shù)名if表達(dá)式。具體實(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行(也就是運(yùn)行完第7行的for循環(huán))設(shè)置了一個(gè)“i==0”的條件斷點(diǎn),在程序運(yùn)行之后可以看出,程序確實(shí)在i為10時(shí)暫停運(yùn)行。

3.gdb中源碼查看相關(guān)命令

在gdb中可以查看源碼以方便其他操作,它的常見(jiàn)相關(guān)命令如表3.13所示。

表3.13 gdb源碼查看相關(guān)相關(guān)命令

命令格式

含義

list行號(hào)>|函數(shù)名>

查看指定位置代碼

file[文件名]

加載指定文件

forward-search正則表達(dá)式

源代碼的前向搜索

reverse-search正則表達(dá)式

源代碼的后向搜索

dirDIR

將路徑DIR添加到源文件搜索的路徑的開(kāi)頭

showdirectories

顯示源文件的當(dāng)前搜索路徑

infoline

顯示加載到gdb內(nèi)存中的代碼

4.gdb中查看運(yùn)行數(shù)據(jù)相關(guān)命令

gdb中查看運(yùn)行數(shù)據(jù)是指當(dāng)程序處于“運(yùn)行”或“暫停”狀態(tài)時(shí),可以查看的變量及表達(dá)式的信息,其常見(jiàn)命令如表3.14所示。

表3.14 gdb查看運(yùn)行數(shù)據(jù)相關(guān)命令

命令格式

含義

print表達(dá)式|變量

查看程序運(yùn)行時(shí)對(duì)應(yīng)表達(dá)式和變量的值

xn/f/u>

查看內(nèi)存變量?jī)?nèi)容。其中n為整數(shù)表示顯示內(nèi)存的長(zhǎng)度,f表示顯示的格式,u表示從當(dāng)前地址往后請(qǐng)求顯示的字節(jié)數(shù)

display表達(dá)式

設(shè)定在單步運(yùn)行或其他情況中,自動(dòng)顯示的對(duì)應(yīng)表達(dá)式的內(nèi)容

backtrace

查看當(dāng)前棧的情況,即可以查到哪些被調(diào)用的函數(shù)尚未返回

linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

linux相關(guān)文章:linux教程




評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉