使用GDB除錯程式

2022-09-16 06:57:12 字數 1643 閱讀 2769

上回話說

使用makefile來組織源**,這回簡單地介紹下如何使用gdb來除錯我們的程式;關於gdb的其它應用將在後續的章節中逐漸深入。

首先需要肯定一點,gdb是個功能異常強大的除錯工具,其本身只能執行於字元模式,但是當前眾多基於gui的偵錯程式/ide,無論是自由軟體還是商業軟體,絕大多數都使用gdb作為其後端(但這些基於gui的偵錯程式都不太穩定),因此gdb是個不二的選擇(筆者推薦的gui偵錯程式:insight和ddd)。

這裡使用 hello_gdb.c 作為例子,如果你從前面一直看過來,對這個程式一定不會陌生,hello_gdb.c 主要在 hello_dubuntu2.c 的基礎上,新增了幾個整型和字串型變數,來演示gdb的一些基本功能:

執行效果圖:

hello_gdb.c 

/* 本例的主要目的是在視窗中顯示乙個按鈕,

* 單擊按鈕退出程式,並構建幾個變數來演示gdb功能。

*/#include

void

cb_button(gtkwidget *widget, gpointer data)

//此函式用於演示gdb直接呼叫被除錯程式的函式

gint

gdb_test(gint arg)

intmain(int argc, char *ar**)

編譯:  gcc -g -wall -o hello_gdb hello_gdb.c `pkg-config --cflags --libs gtk+-2.0`

注意:-g 引數用於為可執行檔案生成除錯資訊;

-wall 用於在編譯程式時列印所有的警告資訊

好了,程式就是上邊這個(hello_gdb.c),我們使用如下的命令對它進行編譯:

gcc -g -wall -o hello_gdb hello_gdb.c `pkg-config --cflags --libs gtk+-2.0`

編譯完後,如果沒有錯誤,將生成 hello_gdb 可執行檔案,此可執行檔案將攜帶 gdb 除錯時所需要的除錯資訊,有了這些除錯訊息,我們就可以在除錯程式的時候檢視函式名,變數名,源**。

好了,開始除錯吧:

1)在命令列下,通過如下命令載入剛編譯生成的 hello_gdb 程式:

gdb  ./hello_gdb

載入成功後,將得到如下提示資訊,並進入 gdb 的命令列模式:

2)好,現在已經成功啟動gdb並且載入了可執行程式 hello_gdb,接下來的命令絕大部分都是爭對 hello_gdb 程式,下面將列舉幾個最常用的命令:

小技巧:在gdb命令中,只需要輸入命令或引數的前幾個字元,再按鍵盤上的「tab」鍵,那gdb將自動補齊命令或引數,如果有多個候選者,那麼gdb將把它們都列舉出來。

注意:如果執行list 命令得到類似如下的列印,那是因為在編譯程式時沒有加入 -g 選項:

(gdb) list

1       ../sysdeps/i386/elf/start.s: no such file or directory.

in ../sysdeps/i386/elf/start.s

set args:設定執行程式時的命令列引數,如:set args 33 55

show args:顯示命令列引數

continue:簡訊為 c ,其作用是繼續執行被斷點中斷的程式。

break:為程式設定斷點。

使用GDB除錯程式

gdb是gnu發布的一款功能強大的程式除錯工具。gdb主要完成下面三個方面的功能 1.啟動被除錯程式 2.讓被除錯的程式在指定的位置停住 3.當程式被停住時,可以檢查程式狀態 如變數值 假如要對程式test.c進行除錯,除錯流程為 1.編譯生成可執行檔案 gcc g test.c o test 2....

GDB除錯程式

gdb的三個功能 1 啟動被除錯的程式 2 設定斷點 3 設定斷點之後可以檢查程式的狀態 1.編譯生成可執行檔案 注意 g 除錯選項 gcc g tst.c o tst 2.啟動gdb gdb tst 3.在main函式處設定斷點 break main 4.執行程式 run5.利用 更加豐富的 gd...

gdb除錯程式

除錯是每個程式設計師都會面臨的問題.如何提高程式設計師的除錯效率,更好更快地定位程式中的問題從而加快程式開發的進度,是大家共同面對的問題.可能windows使用者順口就會說出 用vc唄 它提供了設定斷點,單步跟蹤等的圖形介面,使除錯起來直觀易用.但linux使用者可能要生悶氣了 o 難道我們linu...