<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/257150.htm

          3.4.2gdb基本命令

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

          (gdb)help

          Listofclassesofcommands:

          aliases--Aliasesofothercommands

          breakpoints--Makingprogramstopatcertainpoints

          data--Examiningdata

          files--Specifyingandexaminingfiles

          internals--Maintenancecommands

          Typehelpfollowedbyaclassnameforalistofcommandsinthatclass.

          Typehelpfollowedbycommandnameforfulldocumentation.

          Commandnameabbreviationsareallowedifunambiguous.

          上述列出了gdb各個分類的命令,注意底部的加粗部分說明其為分類命令。接下來可以具體查找各分類的命令,如下所示:

          (gdb)helpdata

          Examiningdata.

          Listofcommands:

          call--Callafunctionintheprogram

          deletedisplay--Cancelsomeexpressionstobedisplayedwhenprogramstops

          deletemem--Deletememoryregion

          disabledisplay--Disablesomeexpressionstobedisplayedwhenprogramstops

          Typehelpfollowedbycommandnameforfulldocumentation.

          Commandnameabbreviationsareallowedifunambiguous.

          若用戶想要查找call命令,就可鍵入“helpcall”。

          (gdb)helpcall

          Callafunctionintheprogram.

          Theargumentisthefunctionnameandarguments,inthenotationofthe

          currentworkinglanguage.Theresultisprintedandsavedinthevalue

          history,ifitisnotvoid.

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

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

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

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

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

          命令格式

          含義

          Infob

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

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

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

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

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

          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)號]條件表達(dá)式>

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

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

          在程序執(zhí)行中,忽略對應(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(可以簡化為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è)置了一個“i==0”的條件斷點(diǎn),在程序運(yùn)行之后可以看出,程序確實(shí)在i為10時(shí)暫停運(yùn)行。

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

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

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

          命令格式

          含義

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

          查看指定位置代碼

          file[文件名]

          加載指定文件

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

          源代碼的前向搜索

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

          源代碼的后向搜索

          dirDIR

          將路徑DIR添加到源文件搜索的路徑的開頭

          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á)式的信息,其常見命令如表3.14所示。

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

          命令格式

          含義

          print表達(dá)式|變量

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

          xn/f/u>

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

          display表達(dá)式

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

          backtrace

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

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

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




          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();