今天介紹一下gdb,如果你是在UNIX平台下做軟體,你會發現GDB這個調試工具有比VC、BCB的圖形化調試器更強大的功能。
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>
program也就是你的執行檔案,一般在目前的目錄下。
2、gdb <program> core
用gdb同時調試一個運行程式和core檔案,core是程式非法執行後core dump後產生的檔案。
3、gdb <program> <PID>
如果你的程式是一個服務程式,那麼你可以指定這個服務程式運行時的進程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,從第一行開始例出原碼)
樣本四:r(運行程式) n(下一步) c(Continuing)
樣本五:p i 查看變數i的值
樣本六:bt 查看函數堆棧
需要特別說明的是,在gdb中運行程式時,使用run命令,可能需要做以下的操作。
1、程式運行參數。
set args 可指定運行時參數。(如:set args 10 20 30 40 50)
show args 命令可以查看設定好的運行參數。
2、運行環境。
path <dir> 可設定程式的運行路徑。
show paths 查看程式的運行路徑。
set environment varname [=value] 設定環境變數。如:set env USER=hchen
show environment [varname] 查看環境變數。
3、工作目錄。
cd <dir> 相當於shell的cd命令。
pwd 顯示當前的所在目錄。
4、程式的輸入輸出。
info terminal 顯示你程式用到的終端的模式。
使用重新導向控製程序輸出。如:run > outfile
tty命令可以指寫輸入輸出的終端裝置。如:tty /dev/ttyb
以上就是對gdb簡單的一個介紹,以後如果有機會會更詳細的介紹各種功能。請大家多多指教。
註:如果希望瞭解更多關於gdb的知識,請看http://blog.csdn.net/haoel/article/details/2879。