Linux GDB常用命令介紹
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)提示:類似于“(y/n)”,輸入y
2.顯示和查找程序源代碼
(1)list :顯示10行代碼,但是我為什么沒有顯示成功呢?
(2)list 5,10:顯示源文件第五行到第十行的代碼
(3)list t4.c:5,10:顯示源文件中第五行到第十行的代碼,在跳是含有多個(gè)源文件的次序時(shí)使用;
(4)list get_sum:顯示get_sum函數(shù)周圍的代碼//什么叫周圍的代碼呢?
(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只是裝入程序,程序并沒有運(yùn)行。如果要程序開始運(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
解釋:Num列表示斷點(diǎn)的編號(hào),Type指明類型,類型位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)以空格隔開。
7.查看和設(shè)置變量的值
(1)print 變量或表達(dá)式 --- print 變量=值:對(duì)變量賦值 --- print 表達(dá)式@要打印的值的個(gè)數(shù)n:打印以表達(dá)式值開始n個(gè)數(shù)
(2)whatis命令:顯示某個(gè)變量或表達(dá)式的數(shù)據(jù)類型。格式: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í)行一條魚據(jù)。單步執(zhí)行一條語(yǔ)句使用next和step命令。通常一條語(yǔ)句有多條機(jī)器指令構(gòu)成的。
注意的是:gdb的一些命令可以簡(jiǎn)寫,比如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
開始調(diào)試運(yùn)行 run F5
運(yùn)行到下一個(gè)斷點(diǎn) continue F5
結(jié)束調(diào)試 kill shift+F5
看了“Linux GDB常用命令介紹”還想看: