gdb使用方法簡介


編譯時必須加上參數-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>

在程序執行中,忽略對應斷點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>

查看內存變量內容。其中n為整數表示顯示內存的長度,f表示顯示的格式,u表示從當前地址往后請求顯示的字節數

display 表達式

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


5.Gdb中修改運行參數相關命令


Gdb還可以修改運行時的參數,並使該變量按照用戶當前輸入的值繼續運行。它的設置方法為:在單步執行的過程中,鍵入命令“set 變量=設定值”。這樣,在此之后,程序就會按照該設定的值運行了。下面,筆者結合上一節的代碼將n的初始值設為4,其代碼如下所示:

(Gdb) b 7

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

(Gdb)      

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”。

· 只有在代碼處於“運行”或“暫停”狀態時才能查看變量值。

· 設置斷點后程序在指定行之前停止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM