GDB 命令詳細解釋?
Linux中包含有一個很有用的調(diào)試工具--gdb(GNU Debuger),它可以用來調(diào)試C和C++程序,功能不亞于Windows下的許多圖形界面的調(diào)試工具。
?
和所有常用的調(diào)試工具一樣,gdb提供了以下功能:
# 監(jiān)視程序中變量的值
# 在程序中設(shè)置斷點
# 程序的單步執(zhí)行
?
在使用gdb前,必須先載入可執(zhí)行文件,因為要進行調(diào)試,文件中就必須包含調(diào)試信息,所以在用gcc或cc編譯時就需要用-g參數(shù)來打開程序的調(diào)試選項。
?
調(diào)試開始時,必須先載入要進行調(diào)試的程序,可以用以下兩種方式:
* 在啟動gdb后執(zhí)行以下命令:
file 可執(zhí)行文件路徑
* 在gdb啟動時就載入程序:
gdb 可執(zhí)行文件路徑
?
載入程序后,接下來就是要進行斷點的設(shè)置,要監(jiān)視的變量的添加等工作,下面對在這個過程中常會用到的命令逐一進行介紹:
* list :顯示程序中的代碼,常用使用格式有:
list
輸出從上次調(diào)用list命令開始往后的10行程序代碼。
list -
輸出從上次調(diào)用list命令開始往前的10行程序代碼。
list n
輸出第n行附近的10行程序代碼。
list function
輸出函數(shù)function前后的10行程序代碼。
* forward/search :從當(dāng)前行向后查找匹配某個字符串的程序行。使用格式:
forward/search 字符串
查找到的行號將保存在$_變量中,可以用print $_命令來查看。
* reverse-search :和forward/search相反,向前查找字符串。使用格式同上。
* break :在程序中設(shè)置斷點,當(dāng)程序運行到指定行上時,會暫停執(zhí)行。使用格式:
break 要設(shè)置斷點的行號
* tbreak :設(shè)置臨時斷點,在設(shè)置之后只起作用一次。使用格式:
tbreak 要設(shè)置臨時斷點的行號
* clear :和break相反,clear用于清除斷點。使用格式:
clear 要清除的斷點所在的行號
* run :啟動程序,在run后面帶上參數(shù)可以傳遞給正在調(diào)試的程序。
* awatch :用來增加一個觀察點(add watch),使用格式:
awatch 變量或表達式
當(dāng)表達式的值發(fā)生改變或表達式的值被讀取時,程序就會停止運行。
* watch :與awatch類似用來設(shè)置觀察點,但程序只有當(dāng)表達式的值發(fā)生改變時才會停止運行。使用格 式:
watch 變量或表達式
需要注意的是,awatch和watch都必須在程序運行的過程中設(shè)置觀察點,即可運行run之后才能設(shè)置。
* commands :設(shè)置在遇到斷點后執(zhí)行特定的指令。使用格式有:
commands
設(shè)置遇到最后一個遇到的斷點時要執(zhí)行的命令
commands n
設(shè)置遇到斷點號n時要執(zhí)行的命令
注意,commands后面跟的是斷點號,而不是斷點所在的行號。
在輸入命令后,就可以輸入遇到斷點后要執(zhí)行的命令,每行一條命令,在輸入最后一條命令后輸入end就可以結(jié)束輸入。
* delete :清除斷點或自動顯示的表達式。使用格式:
delete 斷點號
* disable :讓指定斷點失效。使用格式:
disable 斷點號列表
斷點號之間用空格間隔開。
* enable :和disable相反,恢復(fù)失效的斷點。使用格式:
enable 斷點編號列表
* ignore :忽略斷點。使用格式:
ignore 斷點號 忽略次數(shù)
* condition :設(shè)置斷點在一定條件下才能生效。使用格式:
condition 斷點號 條件表達式
* cont/continue :使程序在暫停在斷點之后繼續(xù)運行。使用格式:
cont
跳過當(dāng)前斷點繼續(xù)運行。
cont n
跳過n次斷點,繼續(xù)運行。
當(dāng)n為1時,cont 1即為cont。
* jump :讓程序跳到指定行開始調(diào)試。使用格式:
jump 行號
* next :繼續(xù)執(zhí)行語句,但是跳過子程序的調(diào)用。使用格式:
next
執(zhí)行一條語句
next n
執(zhí)行n條語句
* nexti :單步執(zhí)行語句,但和next不同的是,它會跟蹤到子程序的內(nèi)部,但不打印出子程序內(nèi)部的語句。使用格式同上。
* step :與next類似,但是它會跟蹤到子程序的內(nèi)部,而且會顯示子程序內(nèi)部的執(zhí)行情況。使用格式同上。
* stepi :與step類似,但是比step更詳細,是nexti和step的結(jié)合。使用格式同上。
* whatis :顯示某個變量或表達式的數(shù)據(jù)類型。使用格式:
whatis 變量或表達式
* ptype :和whatis類似,用于顯示數(shù)據(jù)類型,但是它還可以顯示typedef定義的類型等。使用格式:
ptype 變量或表達式
* set :設(shè)置程序中變量的值。使用格式:
set 變量=表達式
set 變量:=表達式
* display :增加要顯示值的表達式。使用格式:
display 表達式
* info display :顯示當(dāng)前所有的要顯示值的表達式。
* delete display/undisplay :刪除要顯示值的表達式。使用格式:
delete display/undisplay 表達式編號
* disable display :暫時不顯示一個要表達式的值。使用格式:
disable display 表達式編號
* enable display :與disable display相反,使用表達式恢復(fù)顯示。使用格式:
enable display 表達式編號
* print :打印變量或表達式的值。使用格式:
print 變量或表達式
表達式中有兩個符號有特殊含義:$和$$。
$表示給定序號的前一個序號,$$表示給定序號的前兩個序號。
如果$和$$后面不帶數(shù)字,則給定序號為當(dāng)前序號。
* backtrace :打印指定個數(shù)的棧幀(stack frame)。使用格式:
backtrace 棧幀個數(shù)
* frame :打印棧幀。使用格式:
frame 棧幀號
* info frame :顯示當(dāng)前棧幀的詳細信息。
* select-frame :選擇棧幀,選擇后可以用info frame來顯示棧幀信息。使用格式:
select-frame 棧幀號
* kill :結(jié)束當(dāng)前程序的調(diào)試。
* quit :退出gdb。
?
本文來自博客園,轉(zhuǎn)載請標(biāo)明出處:http://www.cnblogs.com/evasnowind/archive/2010/11/07/1871324.html
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

