Linux上的C C 偵錯程式GDB

2021-03-31 08:57:00 字數 2235 閱讀 3558

gnu 的偵錯程式稱為 gdb,該程式是乙個互動式工具,工作在字元模式。在 x window 系統中,有乙個 gdb 的前端圖形工具,稱為 ***gdb。gdb 是功能強大的除錯程式,可完成如下的除錯任務:

* 設定斷點;

* 監視程式變數的值;

* 程式的單步執行;

* 修改變數的值。

在可以使用 gdb 除錯程式之前,必須使用 -g 選項編譯原始檔。可在 makefile 中如下定義 cflags 變數:cflags = -g

執行 gdb 除錯程式時通常使用如下的命令:

gdb progname

在 gdb 提示符處鍵入help,將列出命令的分類,主要的分類有:

* aliases:命令別名

* breakpoints:斷點定義;

* data:資料檢視;

* files:指定並檢視檔案;

* internals:維護命令;

* running:程式執行;

* stack:呼叫棧檢視;

* statu:狀態檢視;

* tracepoints:跟蹤程式執行。

鍵入 help 後跟命令的分類名,可獲得該類命令的詳細清單。

常用的 gdb 命令

命令 解釋

break num 在指定的行上設定斷點。

bt 顯示所有的呼叫棧幀。該命令可用來顯示函式的呼叫順序。

clear 刪除設定在特定原始檔、特定行上的斷點。其用法為:clear filename:num。

continue 繼續執行正在除錯的程式。該命令用在程式由於處理訊號或斷點而導致停止執行時。

display expr 每次程式停止後顯示表示式的值。表示式由程式定義的變數組成。

file file 裝載指定的可執行檔案進行除錯。

help name 顯示指定命令的幫助資訊。

info break 顯示當前斷點清單,包括到達斷點處的次數等。

info files 顯示被除錯檔案的詳細資訊。

info func 顯示所有的函式名稱。

info local 顯示當函式中的區域性變數資訊。

info prog 顯示被除錯程式的執行狀態。

info var 顯示所有的全域性和靜態變數名稱。

kill 終止正被除錯的程式。

list 顯示源**段。

make 在不退出 gdb 的情況下執行 make 工具。

next 在不單步執行進入其他函式的情況下,向前執行一行源**。

print expr 顯示表示式 expr 的值。

gdb 使用範例

--------------------------------

清單 乙個有錯誤的 c 源程式 bugging.c

--------------------------------

#include

#include

static char buff [256];

static char* string;

int main ()

-----------------------------------

上面這個程式非常簡單,其目的是接受使用者的輸入,然後將使用者的輸入列印出來。該程式使用了乙個未經過初始化的字串位址 string,因此,編譯並執行之後,將出現 segment fault 錯誤:

$ gcc -o test -g test.c

$ ./test

please input a string: asfd

segmentation fault (core dumped)

為了查詢該程式中出現的問題,我們利用 gdb,並按如下的步驟進行:

1.執行 gdb bugging 命令,裝入 bugging 可執行檔案;

2.執行裝入的 bugging 命令;

3.使用 where 命令檢視程式出錯的地方;

4.利用 list 命令檢視呼叫 gets 函式附近的**;

5.唯一能夠導致 gets 函式出錯的因素就是變數 string。用 print 命令檢視 string 的值;

6.在gdb中,我們可以直接修改變數的值,只要將string取乙個合法的指標值就可以了,為此,我們在第11 行處設定斷點;

7.程式重新執行到第 11 行處停止,這時,我們可以用 set variable 命令修改 string 的取值;

8.然後繼續執行,將看到正確的程式執行結果。

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