Gdb 偵錯程式

2021-09-25 08:19:00 字數 2524 閱讀 6317

除錯是所有程式設計師都會面臨的問題。如何提高程式設計師的除錯效率,更好更快地定位程式 中的問題從而加快程式開發的進度,是大家共同面對的。就如讀者熟知的 windows 下的一些 除錯工具,如 vc 自帶的如設定斷點、單步跟蹤等,都受到了廣大使用者的讚賞。

那麼,在 linux 下有什麼很好的除錯工具呢? 下面所介紹的 gdb 偵錯程式是一款 gnu 開發組織並發布的 unix/linux 下的程式除錯工 具。雖然,它沒有圖形化的友好介面,但是它強大的功能也足以與微軟的 vc 工具等媲美。 下面就請跟隨筆者一步步學習 gdb 除錯。

除錯介面:

注意,gdb 進行除錯的是可執行檔案,而不是如「.c」的源**,因 此,需要先通過 gcc 編譯生成可執行檔案才能用 gdb 進行除錯。

gcc -g test.c -o test

gdb test (test為檔名)

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

如果顯示不全,可以多按幾次l。

可以看出,gdb 列出的源**中明確地給出了對應的行號,這樣就可以大大地方便** 的定位。

設定斷點是除錯程式中是乙個非常重要的手段,它可以使程式到一定位置暫停它的 執行。因此,程式設計師在該位置處可以方便地檢視變數的值、堆疊情況等,從而找出** 的癥結所在。

在 gdb 中設定斷點非常簡單,只需在「b」後加入對應的行號即可(這是最常用的方式,另外還有其他方式設定斷點)

如下所示:

b 13
在設定完斷點之後,使用者可以鍵入「info b」來檢視設定斷點情況,在 gdb 中可以設定 多個斷點。

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

可以看到,程式執行到斷點處就停止了。

(gdb) p n

$1 = 0

(gdb) p i

$2 = 134518440

在此處,為什麼變數「i」的值為如此奇怪的乙個數字呢?原因就在於程式是在斷點設定 的對應行之前停止的,那麼在此時,並沒有把「i」的數值賦為零,而只是乙個隨機的數字。 但變數「n」是在第四行賦值的,故在此時已經為零。

gdb 在顯示變數值時都會在對應值之前加上「n」標

記,它是

當前變數

值的引用

標記,所

以以後若

想再次引

用此變數

就可以直

接寫作「

n」標記,它是當前變數值的引用標記,所以 以後若想再次引用此變數就可以直接寫作「

n」標記,它

是當前變

量值的引

用標記,

所以以後

若想再次

引用此變

量就可以

直接寫作

「n」,而無需寫冗長的變數名。

單步執行可以使用命令「n」( next)或「s」( step),它們之間的區別在於:若有函式調 用的時候, 「s」會進入該函式而「n」不會進入該函式。因此, 「s」就類似於 vc 等工具中的 「step in」

, 「n」類似與 vc 等工具中的「step over」。它們的使用如下所示:

(gdb) n the sum of 1-m is 1275 7 for(i=1; i<=50; i++) (gdb) s sum (m=50) at test.c:16 16 int i,n=0;

可見,使用「n」後,程式顯示函式 sum的執行結果並向下執行,而使用「s」後則進入 到 sum函式之中單步執行。

在檢視完所需變數及堆疊情況後,就可以使用命令「c」( continue)恢復程式的正常執行 了。這時,它會把剩餘還未執行的程式執行完,並顯示剩餘程式中的執行結果。以下是之前 使用「n」命令恢復後的執行結果:

(gdb) c continuing. the sum of 1-50 is :1275

program exited with code 031.

可以看出,程式在執行完後退出,之後程式處於「停止狀態」。

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

GDB偵錯程式

偵錯程式gdb 一 啟動和退出gdb gdb除錯的物件是可執行檔案,而不是程式的源 如果要使乙個可執行檔案可以被gdb除錯,那麼在使用編譯器gcc編譯程式時需要加入 g選項。gdb除錯乙個程式的命令格式是 gdb 程式檔名 也可以在linux提示符下,直接輸入gdb,然後使用file命令裝入要除錯的...

gdb偵錯程式

在使用gdb偵錯程式之前,必須在編譯程式時加上 g選項 功能 顯示上次內容之前或之後的10行內容,首次使用顯示main 函式之前或之後的10行內容 命令 list 簡稱 l 功能 顯示引數行之前和之後的10行內容.命令 list line number 簡稱 l 10 功能 顯示原始檔從一行到另一行...

gdb偵錯程式

gdb是gnu發布的一款強大的除錯功能 gdb主要完成下面三個方面的功能 1 啟動被除錯程式 2 讓被除錯的程式在指定的位置停住 3 當程式停住時,可以檢視程式的狀態 變數值 gcc g test.c o test 生成除錯資訊 gdb test 啟動gdb gdb除錯工具相關命令 gdb run ...