今天介紹一下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。