gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像vc、bcb等ide的除錯,但如果你是在unix平台下做軟體,你會發現gdb這個除錯工具有比vc、bcb的圖形化偵錯程式更強大的功能。所謂「寸有所長,尺有所短」就是這個道理。
一般來說,gdb主要幫忙你完成下面四個方面的功能:
1、啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。
2、可讓被除錯的程式在你所指定的調置的斷點處停住。(斷點可以是條件表示式)
3、當程式被停住時,可以檢查此時你的程式中所發生的事。
4、動態的改變你程式的執行環境。
從上面看來,gdb和一般的除錯工具沒有什麼兩樣,基本上也是完成這些功能,不過在細節上,你會發現gdb這個除錯工具的強大,大家可能比較習慣了圖形化的除錯工具,但有時候,命令列的除錯工具卻有著圖形化工具所不能完成的功能。讓我們一一看來。
一般來說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環境變數中搜尋得到。
從指定檔案中讀取符號表。
從指定檔案中讀取符號表資訊,並把他用在可執行檔案中。
除錯時core dump的core檔案。
加入乙個原始檔的搜尋路徑。預設搜尋路徑是環境變數中path所定義的路徑。
除錯例項
源程式:test.c
#include int func(int n)
{ int sum=0,i;
for(i=0; icc -g tst.c -o tst
使用gdb除錯:
hchen/test> gdb tst <---------- 啟動gdb
gnu gdb 5.1.1
gdb is free software, covered by the gnu general public license, and you are
welcome to change it and/or distribute copies of it under certain conditions.
type "show copying" to see the conditions.
there is absolutely no warranty for gdb. type "show warranty" for details.
this gdb was configured as "i386-suse-linux"...
(gdb) l <-------------------- l命令相當於list,從第一行開始例出原碼。
1 #include 2
3 int func(int n)
4 {
5 int sum=0,i;
6 for(i=0; i
GDB使用技巧
1 啟動 1 程式的執行引數。set args 指定執行時引數。如 setargs1020304050 show args 檢視設定好的執行引數。2 執行環境 path 設定程式的執行路徑。show paths 檢視程式的執行路徑。set environment varname value 設定環境...
gdb使用技巧
1.斷點的設定 普通斷點 b n 注 n為行號 或者是break n。此方法過於簡單,不再舉例說明。條件斷點 b n if 邏輯表示式 注 以上兩種斷點型別中tbreak設定方法與break相同,只不過tbreak只在斷點停一次,過後會自動將斷點刪除,break需要手動控制斷點的刪除和使能。demo...
gdb 使用技巧
實驗平台 linux gcc gdb 除錯正在執行的程序。多次 fork exec 的程式,從頭開始跟蹤非常麻煩。可以使程式停在我們感興趣的地方,然後用 gdb 去 attach。printf i am waiting for being attached by gdb.my pid d s d n...