GDB 用法和命令介紹

一、GDB常用命令簡介

 

r run 運行.程序還沒有運行前使用
c             cuntinue   運行到下一斷點處
q quit                        退出
tab tab 命令補全功能
h    help 幫助
s step 跟入函數
n next 執行下一行的代碼。如果是函數調用,也當作一行代碼,執行到此函數返回
b    breakpoint

設置斷點,用法:(1)b 函數名 (2)b 文件名:行號

info b info breakpoints 查看斷點數
del delete 刪除斷點:delete 斷點號
list 列出代碼行。一次列10 行。 也可在 list 後面跟上 文件名:行號
watch watch 觀察一個變量的值。每次中斷時都會顯示這個變量的值
what what 顯示變量的類型
p print 打印一個變量的值。print 也可改變一個值,通過指令 p b = 100,變量b 的值就變成100了
start start 從主函數 main 開始運行調試
fin finish 運行直至當前函數返回

 

二、GDB命令詳解

 

和所有常用的調試工具一樣,gdb提供了以下功能:
監視程序中變量的值
在程序中設置斷點
程序的單步執行

在使用gdb前,必須先載入可執行文件,因爲要進行調試,文件中就必須包含調試信息,所以在用gcccc編譯時就需要用-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 變量或表達式
  需要注意的是,awatchwatch都必須在程序運行的過程中設置觀察點,即可運行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次斷點,繼續運行。
  當n1時,cont 1即爲cont
jump :讓程序跳到指定行開始調試。使用格式:
jump 行號
next :繼續執行語句,但是跳過子程序的調用。使用格式:
next
      執行一條語句
next n
      執行n條語句
nexti :單步執行語句,但和next不同的是,它會跟蹤到子程序的內部,但不打印出子程序內部的語句。使用格式同上。
step :與next類似,但是它會跟蹤到子程序的內部,而且會顯示子程序內部的執行情況。使用格式同上。
stepi :與step類似,但是比step更詳細,是nextistep的結合。使用格式同上。
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的官方文檔:
http://www.gnu.org/software/gdb/documentation/


轉載:http://blog.csdn.net/cskerrydn/article/details/5029344

發佈了29 篇原創文章 · 獲贊 5 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章