gdb debug 使用方法簡介

2021-06-19 23:38:13 字數 3514 閱讀 5034

編譯時必須加上引數-g ,例:g++ -g temp.cpp -o temp.通過gcc編譯生成可執行檔案才能用gdb進行除錯。

進入gdb介面

:gdb temp.提示符變成(gdb)

(1)檢視檔案

在gdb中鍵入」l」(list)就可以檢視所載入的檔案

(2)設定斷點

只需在」b」後加入對應的行號即可(這是最常用的方式,另外還有其他方式設定斷點)。如下所示:

(gdb)b 6

**執行到第五行之前暫停(並沒有執行第五行)。

(3)檢視斷點情況

(gdb)info b

(4)執行**

gdb預設從首行開始執行**,可鍵入」r」(run)即可(若想從程式中指定行開始執行,可在r後面加上行號)。

(5)檢視變數值

檢視斷點處的相關變數值。在gdb中只需鍵入」p」+變數值即可,如下所示:

(gdb)p n

gdb在顯示變數值時都會在對應值之前加上」$n」標記,它是當前變數值的引用標記,所以以後若想再次引用此變數就可以直接寫作」$n」,而無需寫冗長的變數名。

(6)單步執行

使用命令」n」(next)或」s」(step),它們之間的區別在於:若有函式呼叫的時候,」s」會進入該函式而」n」不會進入該函式。因此,」s」就類似於vc等工具中的」step in」,」n」類似與vc等工具中的」step over」。

(7)恢復程式執行

使用命令」c」(continue).

在gdb中,程式的執行狀態有「執行」、「暫停」和「停止」三種,其中「暫停」狀態為程式遇到了斷點或觀察點之類的,程式暫時停止執行,而此時函式的位址、函式引數、函式內的區域性變數都會被壓入「棧」(stack)中。故在這種狀態下可以檢視函式的變數值等各種屬性。但在函式處於「停止」狀態之後,「棧」就會自動撤銷,它也就無法檢視各種資訊了。

gdb

中的命令主要分為以下幾類

1.工作環境相關命令

set args執行時的引數

指定執行時引數,如:set args 2

show args

檢視設定好的執行引數

path dir

設定程式的執行路徑

show paths

檢視程式的執行路徑

set environment var [=value]

設定環境變數

show environment [var]

檢視環境變數

cd dir

進入到dir目錄,相當於shell中的cd命令

pwd顯示當前工作目錄

shell command

執行shell的command命令

2.設定斷點與恢復命令

info b

檢視所設斷點

break 行號或函式名 《條件表示式》

設定斷點

tbreak 行號或函式名 《條件表示式》

設定臨時斷點,到達後被自動刪除

delete [斷點號]

刪除指定斷點,其斷點號為」info b」中的第一欄。若預設斷點號則刪除所有斷點

disable [斷點號]]

停止指定斷點,使用」info b」仍能檢視此斷點。同delete一樣,省斷點號則停止所有斷點

enable [斷點號]

啟用指定斷點,即啟用被disable停止的斷點

condition [斷點號] 《條件表示式》

修改對應斷點的條件

ignore [斷點號]

在程式執行中,忽略對應斷點num次

step

單步恢復程式執行,且進入函式呼叫

next

單步恢復程式執行,但不進入函式呼叫

finish

執行程式,直到當前函式完成返回 c

繼續執行函式,直到函式結束或遇到新的斷點

由於設定斷點在gdb的除錯中非常重要,所以在此再著重講解一下gdb中設定斷點的方法。

gdb中設定斷點有多種方式:其一是按行設定斷點,設定方法在3.5.1節已經指出,在此就不重複了。另外還可以設定函式斷點和條件斷點,在此結合上一小節的**,具體介紹後兩種設定斷點的方法。

① 函式斷點

(gdb)b 函式名

② 條件斷點

格式為:b 行數或函式名 if 表示式

(gdb) b 8 if i==10

3.gdb中原始碼檢視相關命令

list 《行號》|《函式名》

檢視指定位置**

file [檔名]

載入指定檔案

forward-search 正規表示式

源**前向搜尋

reverse-search 正規表示式

源**後向搜尋

dir dir

停止路徑名

show directories

顯示定義了的原始檔搜尋路徑

info line

顯示載入到gdb記憶體中的**

4.gdb中檢視執行資料相關命令

指當程式處於「執行」或「暫停」狀態時,可以檢視的變數及表示式的資訊

print 表示式|變數

檢視程式執行時對應表示式和變數的值

x 檢視記憶體變數內容。其中n為整數表示顯示記憶體的長度,f表示顯示的格式,u表示從當前位址往後請求顯示的位元組數

display 表示式

設定在單步執行或其他情況中,自動顯示的對應表示式的內容

5.gdb中修改執行引數相關命令

gdb還可以修改執行時的引數,並使該變數按照使用者當前輸入的值繼續執行。它的設定方法為:在單步執行的過程中,鍵入命令「set 變數=設定值」。這樣,在此之後,程式就會按照該設定的值執行了。下面,筆者結合上一節的**將n的初始值設為4,其**如下所示:

(gdb)b 7

breakpoint 5 at 0x804847a: file test.c, line 7.

(gdb)r

starting program: /home/yul/test

the sum of 1-m is 1275 

breakpoint 5, main () at test.c:7

7                  for(i=1; i<=50; i++)

(gdb)set n=4

(gdb)c

continuing.

the sum of 1-50 is 1279

program exited with code 031. 

可以看到,最後的執行結果確實比之前的值大了4。

gdb的使用切記點:

· 在gcc編譯選項中一定要加入」-g」。

· 只有在**處於「執行」或「暫停」狀態時才能檢視變數值。

· 設定斷點後程式在指定行之前停止。

gdb使用方法簡介

編譯時必須加上引數 g 例 g g temp.cpp o temp.通過gcc編譯生成可執行檔案才能用gdb進行除錯。進入gdb介面 gdb temp.提示符變成 gdb 1 檢視檔案 在gdb中鍵入 l list 就可以檢視所載入的檔案 2 設定斷點 只需在 b 後加入對應的行號即可 這是最常用的...

gdb使用方法簡介

編譯時必須加上引數 g 例 g g temp.cpp o temp.通過gcc編譯生成可執行檔案才能用gdb進行除錯。進入gdb介面 gdb temp.提示符變成 gdb 1 檢視檔案 在gdb中鍵入 l list 就可以檢視所載入的檔案 2 設定斷點 只需在 b 後加入對應的行號即可 這是最常用的...

convirt使用方法簡介

今天介紹下如何用convirt來管理kvm或者xen的虛擬機器 convirt的安裝方法網上很容易找,也不是很複雜,重點介紹下它的使用方法 1.convirt 主面板 主要包括三部分,左邊樹,右邊展示區和下邊的操作提示資訊 www.2cto.com 2.它的功能列表是通過右鍵選單來展示的 www.2...