[转载].gdb调试器快速入门
調(diào)試在我們編寫程序時(shí)占有重要的地位。在linux下如何使用gdb調(diào)試器?下面采用FQA的方式讓你快速了解gdb調(diào)試器。
1.如何啟動(dòng)gdb調(diào)試器呢?
在終端輸入 gdb 程序文件名 即可。注意gdb調(diào)試的是可執(zhí)行文件,而不是源代碼。因此此處的文件名應(yīng)該是可執(zhí)行程序文件名。成功進(jìn)入gdb后會(huì)顯示一大段文字說明,然后是gdb提示符:(gdb) 。
請(qǐng)注意在進(jìn)入gdb之前應(yīng)該按照如下方式編譯源程序:
gcc -g test_gdb.c -o test_gdb
只有加入選項(xiàng)-g才能被gdb調(diào)試。
2.除了上述方法,還有其他方法進(jìn)入gdb嗎?
直接在終端輸入:gdb,成功進(jìn)入后,使用file命令裝入要調(diào)試的程序。輸入:?file 程序文件名?即可。
3.我成功進(jìn)入了gdb,如何退出呢?
使用quit命令,輸入:?quit?即可。
4.進(jìn)入gdb后,我要查看源代碼必須退出才能查看嗎?
當(dāng)然不用。下面的命令可以幫助你快速查看源碼。
list: 顯示10源代碼,再次輸入該命令顯示接下來的10行。
list 1,10:顯示從第一行到第10行的代碼。
list 函數(shù)名:顯示此函數(shù)名周圍的代碼。
5.gdb可以設(shè)置斷點(diǎn)嗎?如何設(shè)置?
在gdb中最簡(jiǎn)單的設(shè)置方式是:break 行號(hào)?在這一行設(shè)置斷點(diǎn)。比如break 9 會(huì)在代碼的第9行設(shè)置斷點(diǎn)。當(dāng)程序執(zhí)行到第9行會(huì)自動(dòng)暫停,此時(shí),第9行代碼還未執(zhí)行。
你也可以使用:break 函數(shù)名?的方式在某個(gè)函數(shù)處設(shè)置斷點(diǎn),程序運(yùn)行到這個(gè)函數(shù)內(nèi)的第一條語句處會(huì)自動(dòng)暫停。
你也可以這樣設(shè)置斷點(diǎn):break 行號(hào)或函數(shù)名 if 條件?。它很好理解,當(dāng)滿足if條件語句時(shí)才會(huì)在指定的行號(hào)或者函數(shù)名處斷點(diǎn)。
6.我發(fā)現(xiàn)我把斷點(diǎn)設(shè)置錯(cuò)了,如何消除斷點(diǎn)?
使用命令:clear 行號(hào)?即可刪除。
7.我已經(jīng)成功設(shè)置了斷點(diǎn),可是我如何運(yùn)行程序以便讓它在斷點(diǎn)處暫停?
輸入:run?即可。程序自動(dòng)停止在第一個(gè)斷點(diǎn)處。
8.我的程序運(yùn)行的時(shí)候需要加參數(shù),我還能繼續(xù)使用run命令運(yùn)行程序嗎?
當(dāng)然可以,只不過你要在run后加上你的參數(shù),參數(shù)間用空格隔開。如:run 參數(shù)1 參數(shù)2??…..
9.有時(shí)候我并不確定程序具體哪一句有問題,我如何一步一步的查看語句?
兩種命令:next和step。兩者均可以一句一句的查看語句。但不同的是,next命令將函數(shù)調(diào)用看作一條語句,而step則會(huì)進(jìn)入函數(shù),一步步的執(zhí)行函數(shù)內(nèi)的代碼。
10.如何讓暫停的代碼繼續(xù)運(yùn)行?
輸入命令:continue。它可以讓程序繼續(xù)運(yùn)行,直到程序運(yùn)行完畢或者遇到下一個(gè)斷點(diǎn)為止。
11.當(dāng)程序在斷點(diǎn)處暫停執(zhí)行時(shí),如何查看當(dāng)前變量的值?
使用print命令。具體如下:
print 命令或者表達(dá)式:顯示變量或表達(dá)式的值。
print 變量=值:為變量賦值。
以上命令屬于基本的調(diào)試命令,更多的命令可以參考man手冊(cè)。
熟悉以上命令便可以快速入門gdb,要熟練的使用調(diào)試器,還需要多多使用。
參考資料:人民郵電出版社 《Linux C編程實(shí)戰(zhàn)》 董永清
轉(zhuǎn)載于:https://www.cnblogs.com/yuphone/archive/2011/03/29/1998322.html
總結(jié)
以上是生活随笔為你收集整理的[转载].gdb调试器快速入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: $('tr',grid) 是什么选择器?
- 下一篇: Flash背景透明的代码