使用gdb進行除錯

2021-08-02 05:27:21 字數 1577 閱讀 7442

gdb主要幫忙你完成下面四個方面的功能:

1、啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。

2、可讓被除錯的程式在你所指定的調置的斷點處停住。(斷點可以是條件表示式)

3、當程式被停住時,可以檢查此時你的程式中所發生的事。

4、動態的改變你程式的執行環境。

一般來說gdb主要除錯的是c/c++的程式。要除錯c/c++的程式,首先在編譯時,我們必須要把除錯資訊加到可執行檔案中。使用編譯器(cc/gcc/g++)的 -g 引數可以做到這一點。如:

> cc -g hello.c -o hello

> g++ -g hello.cpp -o hello

如果沒有-g,你將看不見程式的函式名、變數名,所代替的全是執行時的記憶體位址。當你用-g把除錯資訊加入之後,並成功編譯目標**以後,讓我們來看看如何用gdb來除錯他。  

啟動gdb的方法有以下幾種:

1、gdb

program也就是你的執行檔案,一般在當前目錄下。

2、gdb core

用gdb同時除錯乙個執行程式和core檔案,core是程式非法執行後core dump後產生的檔案。

3、gdb

如果你的程式是乙個服務程式,那麼你可以指定這個服務程式執行時的程序id。gdb會自動attach上去,並除錯他。program應該在path環境變數中搜尋得到。

在啟動了gdb後,就可以開始使用gdb中命令了。如果希望檢視都有哪些命令,可以輸入help進行查詢。

下面簡單演示幾個小例子:

示例一:在進入函式func時,設定乙個斷點。可以敲入break func,或是直接就是b func

(gdb) b func

breakpoint 1 at 0x8048458: file hello.c, line 10.

示例二:敲入b按兩次tab鍵,你會看到所有b打頭的命令:

(gdb) b

backtrace  break      bt

示例三:l(l命令相當於list,從第一行開始例出原碼)

示例五:p i 檢視變數i的值

示例六:bt 檢視函式堆疊

需要特別說明的是,在gdb中執行程式時,使用run命令,可能需要做以下的操作。

1、程式執行引數。

set args 可指定執行時引數。(如:set args 10 20 30 40 50)

show args 命令可以檢視設定好的執行引數。

2、執行環境。

path 可設定程式的執行路徑。

show paths 檢視程式的執行路徑。

set environment varname [=value] 設定環境變數。如:set env user=hchen

show environment [varname] 檢視環境變數。  

3、工作目錄。

cd 相當於shell的cd命令。

pwd 顯示當前的所在目錄。

4、程式的輸入輸出。

info terminal 顯示你程式用到的終端的模式。

使用重定向控制程式輸出。如:run > outfile

tty命令可以指寫輸入輸出的終端裝置。如:tty /dev/ttyb

使用GDB進行除錯

使用gdb除錯c程式 gdb是gnu開源組織發布的乙個非圖形化的unix下的程式除錯軟體。它能使使用者在程式執行時觀察資料的內部結構和記憶體使用情況。gdb提供的主要功能 1 監視程式中的變數值 2 設定斷點,使程式在指定 行停止。3 單步執行 4 動態改變程式的執行環境 等一 除錯乙個簡單的程式 ...

gdb 除錯入門(二) 使用終端進行 gdb 除錯

在安裝完 gdb 後,就可以嘗試使用 gdb 在終端中除錯程式了,如果對安裝 gdb 存在疑惑,請參考 gdb 除錯入門 一 windows linux ubuntu 下安裝 gdb。首先編寫乙個簡單的helloworld.c include intmain 你也可以定位到你需要除錯的 c 程式,然...

利用終端進行GDB除錯

眾所周知,除錯的辦法有 折半插斷點輸出的方式,還有區域性注釋編譯執行的方式之外,就是gdb除錯了 現總結gdb除錯中常用的語句操作。首選,利用終端編譯檔案的時候,需要使用選擇項 g 編譯可執行檔案,不然的花,無法進行gdb除錯 gdb的基本語句 命令 list 顯示區域性 b 行號 在第幾行插入斷點...