學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > Linux教程 > Linux GDB常用命令介紹

Linux GDB常用命令介紹

時(shí)間: 志藝942 分享

Linux GDB常用命令介紹

  你還在為不知道Linux GDB常用命令介紹而煩惱么?接下來(lái)是小編為大家收集的Linux GDB常用命令介紹,希望能幫到大家。

  Linux GDB常用命令介紹

  1.啟動(dòng)和退出gdb

  (1)啟動(dòng):gdb ***:顯示一段版權(quán)說(shuō)明; (*** 表示可執(zhí)行程序名)

  (2)退出:quit。有的時(shí)候輸入quit后會(huì)出現(xiàn)相關(guān)提示:類(lèi)似于“(y/n)”,輸入y

  2.顯示和查找程序源代碼

  (1)list :顯示10行代碼,但是我為什么沒(méi)有顯示成功呢?

  (2)list 5,10:顯示源文件第五行到第十行的代碼

  (3)list t4.c:5,10:顯示源文件中第五行到第十行的代碼,在跳是含有多個(gè)源文件的次序時(shí)使用;

  (4)list get_sum:顯示get_sum函數(shù)周?chē)拇a//什么叫周?chē)拇a呢?

  (5)list t4.c :get_sum:顯示源文件t4.c中第五行到第十行的代碼,在跳是含有多個(gè)源文件的次序時(shí)使用;

  (6)如果在調(diào)試中運(yùn)行l(wèi)inux命令,則可以在gdb的提示符下輸入shell命令. (gdb)shell ls

  (7)search forward用來(lái)從當(dāng)前行向前查找第一個(gè)匹配的字符串;

  search get_sum forward get_sum

  (8)reverse_search 用來(lái)從當(dāng)前行想前查找第一個(gè)匹配的字符串: Example: reverse_search main

  3.執(zhí)行程序和獲得幫助;

  gdb -q test 或者file test只是裝入程序,程序并沒(méi)有運(yùn)行。如果要程序開(kāi)始運(yùn)行,在gdb提示符下輸入run即可。

  如果想要詳細(xì)了解gdb某個(gè)命令的使用方法,可以用help 命令 Example:(gdb)help list (gdb)help all

  4.設(shè)置和管理斷點(diǎn)

  (1)以行號(hào)設(shè)置斷點(diǎn):(gdb)break 7

  (2)以函數(shù)名設(shè)置斷點(diǎn):(gdb)break get_sum

  (3)以條件表達(dá)式設(shè)置斷點(diǎn):方法一:break 行號(hào)或者函數(shù)名 if 條件. Example: (gdb)break 7 if i==99

  方法二:watch 條件表達(dá)式,下面是具體的舉例:

  方法三:awatch;用來(lái)給表達(dá)式設(shè)置斷點(diǎn),在表達(dá)式的值發(fā)生改變或者表達(dá)式的值杯讀取的時(shí)候,程序暫時(shí)停止;

  (4).查看當(dāng)前設(shè)置的斷點(diǎn):info breakpoints

  Num Type Disp Enb Address What

  解釋?zhuān)篘um列表示斷點(diǎn)的編號(hào),Type指明類(lèi)型,類(lèi)型位breakpoints說(shuō)明是中斷。Disp指示中斷點(diǎn)在生效一次后是否就失去作用,如果是則為dis,不時(shí)則為keep。     Bnb表明當(dāng)前中斷點(diǎn)是否有效,如果是y,不是則為n。Address列表中斷所處的內(nèi)存地址。What列出中斷發(fā)生在哪個(gè)函數(shù)的第幾行。

  5.使斷點(diǎn)失效或者有效

  使用“disable 斷點(diǎn)編號(hào)”命令可以是某個(gè)斷點(diǎn)失效,程序運(yùn)行到該段點(diǎn)時(shí)不會(huì)停下來(lái)而是繼續(xù)運(yùn)行。

  使用“enable 斷點(diǎn)編號(hào)”命令可以是某個(gè)斷點(diǎn)恢復(fù)有效。

  6.刪除斷點(diǎn)

  disable只是讓某個(gè)斷點(diǎn)暫時(shí)失效,斷點(diǎn)依然存在與程序中。如果要徹底的刪除某個(gè)斷點(diǎn),可以使用clear或者delete命令。

  (1)clear:刪除程序中所有的斷點(diǎn);

  (2)clear 行號(hào):刪除此行中的斷點(diǎn)

  (3)clear 函數(shù)名:刪除該函數(shù)的斷點(diǎn)

  (4)delete 斷點(diǎn)編號(hào):刪除指定編號(hào)的斷點(diǎn)。如果一次要?jiǎng)h除多個(gè)斷點(diǎn),各個(gè)斷點(diǎn)編號(hào)以空格隔開(kāi)。

  7.查看和設(shè)置變量的值

  (1)print 變量或表達(dá)式 --- print 變量=值:對(duì)變量賦值 --- print 表達(dá)式@要打印的值的個(gè)數(shù)n:打印以表達(dá)式值開(kāi)始n個(gè)數(shù)

  (2)whatis命令:顯示某個(gè)變量或表達(dá)式的數(shù)據(jù)類(lèi)型。格式:whatis 變量或者表達(dá)式

  (3)set 命令:給變量賦值,格式:set variable 變量=值

  將上面實(shí)例中的print i=200改為set variable i=200可以得到同樣的效果//這個(gè)不懂矮。。

  除了這個(gè)用法外,set命令還有一些其他用法。比如可以針對(duì)遠(yuǎn)程調(diào)試進(jìn)行設(shè)置,可以用來(lái)設(shè)置gdb一行的字符數(shù)等。

  8.控制程序的執(zhí)行

  (1)continue命令:讓程序繼續(xù)運(yùn)行,直到下一個(gè)斷點(diǎn)或者運(yùn)行完為止。格式:continue

  (2)kill命令:用于結(jié)束當(dāng)前程序的調(diào)試

  (3)next和step命令

  區(qū)別:如果遇到函數(shù),next會(huì)把函數(shù)調(diào)用當(dāng)作一條語(yǔ)句來(lái)執(zhí)行,再次輸入next會(huì)執(zhí)行函數(shù)調(diào)用后的語(yǔ)句;

  而step則會(huì)跟蹤進(jìn)入函數(shù),一次一條的執(zhí)行函數(shù)內(nèi)的代碼,直到函數(shù)內(nèi)的代碼執(zhí)行完,在進(jìn)行函數(shù)調(diào)用后的語(yǔ)句;

  (4)nexti和stepi命令:用來(lái)單步執(zhí)行一條機(jī)器指令,注意不是單步執(zhí)行一條魚(yú)據(jù)。單步執(zhí)行一條語(yǔ)句使用next和step命令。通常一條語(yǔ)句有多條機(jī)器指令構(gòu)成的。

  注意的是:gdb的一些命令可以簡(jiǎn)寫(xiě),比如list可以用li來(lái)代替,continue命令可以用cont來(lái)代替。

  9. Linux GDB命令與Visual Studio Debug下命令對(duì)比:

  Linux windows

  進(jìn)入調(diào)試   gdb *.exe F5

  quit

  增加/取消斷點(diǎn) break LineNumber   F9

  clear LineNumber

  單步運(yùn)行        next F10

  step F11

  開(kāi)始調(diào)試運(yùn)行      run F5

  運(yùn)行到下一個(gè)斷點(diǎn)    continue F5

  結(jié)束調(diào)試        kill shift+F5


看了“Linux GDB常用命令介紹”還想看:

1.Linux系統(tǒng)有什么常用命令

2.Linux安全性能檢查常用命令介紹

3.Linux實(shí)用工具的命令行詳解

4.Linux GCC常用命令詳解

5.CMD命令提示符詳細(xì)知識(shí)

2805121