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 行號 在第幾行插入斷點...