編譯時必須加上引數-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 n
gdb在顯示變數值時都會在對應值之前加上」$n」標記,它是當前變數值的引用標記,所以以後若想再次引用此變數就可以直接寫作」$n」,而無需寫冗長的變數名。
(6)單步執行
使用命令」n」(next)或」s」(step),它們之間的區別在於:若有函式呼叫的時候,」s」會進入該函式而」n」不會進入該函式。因此,」s」就類似於vc等工具中的」step in」,」n」類似與vc等工具中的」step over」。
(7)恢復程式執行
使用命令」c」(continue).
在gdb中,程式的執行狀態有「執行」、「暫停」和「停止」三種,其中「暫停」狀態為程式遇到了斷點或觀察點之類的,程式暫時停止執行,而此時函式的位址、函式引數、函式內的區域性變數都會被壓入「棧」(stack)中。故在這種狀態下可以檢視函式的變數值等各種屬性。但在函式處於「停止」狀態之後,「棧」就會自動撤銷,它也就無法檢視各種資訊了。
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基本使用方法簡介
gdb基本使用方法 前言程式 中的錯誤可分為數類,除了最容易除錯的語法錯誤,編譯程式會告訴你錯誤所在外,大部分的錯誤都可以歸類為執行時錯誤。gdb 的功能便是尋找執行時錯誤。如果沒有除錯程式,我們只能在程式中加入輸出變數值的指令來了解程式執行的狀態。有了 gdb 除錯程式,我們可以設定在任何地方停止...
gdb使用方法
一 程式例子 test.c include int fun int n return sum int main printf d n sum int ret 0 ret fun sum printf d n ret return 0 二 編譯 g表示開啟除錯開關 sudo gcc g test.c ...