GDB偵錯程式

2021-09-29 13:05:33 字數 1809 閱讀 4413

程式的除錯工作在整個程式的開發過程中佔據了相當大的比例。使用gce除錯c程式時,只能依靠gce發出的警告或錯誤資訊來進行,所以除錯的效率非常低,

為此,gnu開發了gdb偵錯程式(gnu debuger). gdb的除錯功能非常強大,甚至可以和visual c++、visual basic、 jbuilder 等開發工具的偵錯程式相媲美,但gdb的缺點是沒有圖形除錯介面。

例如:test.c:

#include

int cal(int n)

int main()

test.c 檔案是乙個通過遞迴呼叫來計算 5 的階乘的程式。通過執行命令"gcc -g test.c -o test"對test.c進行編譯,其中引數 g 的作用是把除錯資訊加入生成的 test 可執行檔案中,否則gdb就無法對 test 進行除錯。

用命令「gdb test」啟動gdb對 test 進行除錯。

gdb首先顯示版本資訊和庫資訊。隨後gdb停留在符號「(gdb)」處等待使用者輸入除錯命令。gdb 提供了大量的命令來實現各種除錯功能。

常用命令介紹:

(1)檢視原始檔

在除錯程式時,gcc會給出產生警告或錯誤的**行數。但在普通的文字環境中是無法直接獲得語句行數的。在gdb中通過命令1( list 的縮寫) 可以檢視所有的**行數。

gdb以10行為單位進行顯示。這樣設計方便了源**的閱讀。

(2)設定斷點

斷點是除錯程式的重要方法,通過斷點可以知道程式每一步的執行狀況(比如當前變數的值、函式是否呼叫、堆疊使用情況等)。在gdb中通過命令b (breakpoint 的縮寫)進行斷點設定。

如下所示:

(gdb) b 7

breakpoint 1 at 0x8048389: file test.c, line 7.

可以看到,命令b在程式的第7行處設定了第乙個斷點,並顯示了該斷點在記憶體中的實體地址

(3)檢視斷點情況

由於使用命令 b 可以設定多個斷點,所以使用者需要能夠隨時檢視各個斷點的情況,在gdb中可以通過命令「info b」檢視所有的斷點情況。

(4)執行程式

在gdb中通過命令 r (run的縮寫) 執行程式。gdb預設從**的首行開始執行 (也可以通過「r 行數」的方式讓程式從指定行數開始執行)。如果程式中有斷點。則程式會在斷點行數的前一行暫停執行。

(5)檢視變數值

程式暫停執行後就可以檢視當前的狀態了。在gdb中通過命令「p變數名」(print的縮寫)檢視當前變數 n 的值。

gdb通過"$n" ("$1"、"2")

來顯示變

量的值。

這樣在下

次檢視變

量值時,

就可以用

"2")來顯示變數的值。這樣在下次檢視變數值時,就可以用"

2")來顯示

變數的值

。這樣在

下次檢視

變數值時

,就可以

用"n"代替變數名了。可以看到,當前變數n的值為5。

(6)繼續執行程式

檢視完當前程式的情況後,就可以讓程式繼續往下執行了。在gdb中通過命令 c 讓程式繼續往下執行。在 test.c 中,由於函式 cal 是遞迴呼叫執行,所以程式會再次在斷點處哲停。程式暫停後可以再次檢視當前變數 n 的值。

(7)單步執行

在程式邏輯比較複雜的時候往往需要程式能一步一步的往下執行,但如果每行都設定乙個斷點的話又會很麻煩。在gdb中可以通過命令s (step 的縮寫)和 n (next的縮寫) 讓程式一步一步的往下執行。其中 s 可以在發生函式呼叫時進入函式內部執行,而 n 不會進入函式內部執行。在 test.c 中。由於函式cal是遞迴呼叫執行,所以只能選擇 s 才能看到變數 n 的值。

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 ...