一、gdb常用命令簡介
rrun
執行.程式還沒有執行前使用
c
cuntinue
執行到下一斷點處
qquit
退出tab
tab命令補全功能
h
help幫助s
step
跟入函式
nnext
執行下一行的**。如果是函式呼叫,也當作一行**,執行到此函式返回
b
breakpoint
設定斷點,用法:(1)b 函式名 (2)b 檔名:行號
info b
info breakpoints
檢視斷點數
deldelete
刪除斷點:delete 斷點號
l list
列出**行。一次列10 行。 也可在 list 後面跟上 檔名:行號
watch
watch
觀察乙個變數的值。每次中斷時都會顯示這個變數的值
what
what
顯示變數的型別
pprint
列印乙個變數的值。print 也可改變乙個值,通過指令 p b = 100,變數b 的值就變成100了
start
start
從主函式 main 開始執行除錯
finfinish
執行直至當前函式返回
二、gdb命令詳解
和所有常用的除錯工具一樣,gdb提供了以下功能:
# 監視程式中變數的值
# 在程式中設定斷點
# 程式的單步執行
在使用gdb前,必須先載入可執行檔案,因為要進行除錯,檔案中就必須包含除錯資訊,所以在用gcc或cc編譯時就需要用-g引數來開啟程式的除錯選項。
除錯開始時,必須先載入要進行除錯的程式,可以用以下兩種方式:
* 在啟動gdb後執行以下命令:
file 可執行檔案路徑
* 在gdb啟動時就引導程式:
gdb 可執行檔案路徑
引導程式後,接下來就是要進行斷點的設定,要監視的變數的新增等工作,下面對在這個過程中常會用到的命令逐一進行介紹:
*list:顯示程式中的**,常用使用格式有:
list
輸出從上次呼叫list命令開始往後的10行程式**。
list -
輸出從上次呼叫list命令開始往前的10行程式**。
list n
輸出第n行附近的10行程式**。
list function
輸出函式function前後的10行程式**。
*forward/search:從當前行向後查詢匹配某個字串的程式行。使用格式:
forward/search 字串
查詢到的行號將儲存在$_變數中,可以用print $_命令來檢視。
*reverse-search:和forward/search相反,向前查詢字串。使用格式同上。
*break:在程式中設定斷點,當程式執行到指定行上時,會暫停執行。使用格式:
break 要設定斷點的行號
*tbreak:設定臨時斷點,在設定之後只起作用一次。使用格式:
tbreak 要設定臨時斷點的行號
*clear:和break相反,clear用於清除斷點。使用格式:
clear 要清除的斷點所在的行號
*run:啟動程式,在run後面帶上引數可以傳遞給正在除錯的程式。
*awatch:用來增加乙個觀察點(add watch),使用格式:
awatch 變數或表示式
當表示式的值發生改變或表示式的值被讀取時,程式就會停止執行。
*watch:與awatch類似用來設定觀察點,但程式只有當表示式的值發生改變時才會停止執行。使用格 式:
watch 變數或表示式
需要注意的是,awatch和watch都必須在程式執行的過程中設定觀察點,即可執行run之後才能設定。
*commands:設定在遇到斷點後執行特定的指令。使用格式有:
commands
設定遇到最後乙個遇到的斷點時要執行的命令
commands n
設定遇到斷點號n時要執行的命令
注意,commands後面跟的是斷點號,而不是斷點所在的行號。
在輸入命令後,就可以輸入遇到斷點後要執行的命令,每行一條命令,在輸入最後一條命令後輸入end就可以結束輸入。
*delete:清除斷點或自動顯示的表示式。使用格式:
delete 斷點號
*disable:讓指定斷點失效。使用格式:
disable 斷點號列表
斷點號之間用空格間隔開。
*enable:和disable相反,恢復失效的斷點。使用格式:
enable 斷點編號列表
*ignore:忽略斷點。使用格式:
ignore 斷點號 忽略次數
*condition:設定斷點在一定條件下才能生效。使用格式:
condition 斷點號 條件表示式
*cont/continue:使程式在暫停在斷點之後繼續執行。使用格式:
cont
跳過當前斷點繼續執行。
cont n
跳過n次斷點,繼續執行。
當n為1時,cont 1即為cont。
*jump:讓程式跳到指定行開始除錯。使用格式:
jump 行號
*next:繼續執行語句,但是跳過子程式的呼叫。使用格式:
next
執行一條語句
next n
執行n條語句
*nexti:單步執行語句,但和next不同的是,它會跟蹤到子程式的內部,但不列印出子程式內部的語句。使用格式同上。
*step:與next類似,但是它會跟蹤到子程式的內部,而且會顯示子程式內部的執**況。使用格式同上。
*stepi:與step類似,但是比step更詳細,是nexti和step的結合。使用格式同上。
*whatis:顯示某個變數或表示式的資料型別。使用格式:
whatis 變數或表示式
*ptype:和whatis類似,用於顯示資料型別,但是它還可以顯示typedef定義的型別等。使用格式:
ptype 變數或表示式
*set:設定程式中變數的值。使用格式:
set 變數=表示式
set 變數:=表示式
*display:增加要顯示值的表示式。使用格式:
display 表示式
*info display:顯示當前所有的要顯示值的表示式。
*delete display/undisplay:刪除要顯示值的表示式。使用格式:
delete display/undisplay 表示式編號
*disable display:暫時不顯示乙個要表示式的值。使用格式:
disable display 表示式編號
*enable display:與disable display相反,使用表示式恢復顯示。使用格式:
enable display 表示式編號
*print:列印變數或表示式的值。使用格式:
print 變數或表示式
表示式中有兩個符號有特殊含義:$和$$。
$表示給定序號的前乙個序號,$$表示給定序號的前兩個序號。
如果$和$$後面不帶數字,則給定序號為當前序號。
*backtrace:列印指定個數的棧幀(stack frame)。使用格式:
backtrace 棧幀個數
*frame:列印棧幀。使用格式:
frame 棧幀號
*info frame:顯示當前棧幀的詳細資訊。
*select-frame:選擇棧幀,選擇後可以用info frame來顯示棧幀資訊。使用格式:
select-frame 棧幀號
*kill:結束當前程式的除錯。
*quit:退出gdb。
如要檢視所有的gdb命令,可以在gdb下鍵入兩次tab(製表符),執行「help command」可以檢視命令command的詳細使用格式。
本文僅對使用gdb除錯過程中的一些常用指令的用法進行簡單地總結,如要獲取關於gdb的更詳細的資料,請參閱gdb的官方文件:
GDB除錯命令
gdb的命令很多,本文不會全部介紹,僅會介紹一些最常用的。在介紹之前,先介紹gdb中的乙個非常有用的功能 補齊功能。它就如同linux下 shell中的命令補齊一樣。當你輸入乙個命令的前幾個字元,然後輸入tab鍵,如果沒有其它命令的前幾個字元與此相同,shell將補齊此命令。如果有 其它命令的前幾個...
GDB除錯命令
用gdb除錯程式 gdb概述 gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像vc bcb等ide的除錯,但如果你是在unix平台下做軟體,你會發現gdb這個除錯工具有比vc bcb的圖形化偵錯程式更強大的功能。所謂 寸有所長,尺有所短 就是這...
GDB除錯命令
run 執行程式 list 檢視 break n 行號 在 n行設定斷點 break n if i x 在 n行設定斷點,當變數 以 i代表變數 為某值時 info break 檢視斷點資訊 delete 斷點編號 刪除斷點 break 函式名 在呼叫該函式的時候停止 next 單步執行 不進入子函...