一般來說,gdb主要幫忙你完成下面四個方面的功能:
1、啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。
2、可讓被除錯的程式在你所指定的調置的斷點處停住。(斷點可以是條件表示式)
3、當程式被停住時,可以檢查此時你的程式中所發生的事。
4、動態的改變你程式的執行環境。
乙個除錯示例
——————
源程式:tst.c
1 #include
23 int func(int n)
4 12
1314 main()
15 {
16 int i;
17 long result = 0;
18 for(i=1; i<=100; i++)
19 {
20 result += i;
3 設定斷點
(gdb) break 16 <-------------------- 設定斷點,在源程式第16行處。
breakpoint 1 at 0x8048496: file tst.c, line 16.
(gdb) break func <-------------------- 設定斷點,在函式func()入口處。
breakpoint 2 at 0x8048456: file tst.c, line 5.
(gdb) info break <-------------------- 檢視斷點資訊。
num type disp enb address what
1 breakpoint keep y 0x08048496 in main at tst.c:16
2 breakpoint keep y 0x08048456 in func at tst.c:5
4 利用斷點操作
(gdb) r <--------------------- 執行程式,run命令簡寫
starting program: /home/hchen/test/tst
breakpoint 1, main () at tst.c:17 <---------- 在斷點處停住。
17 long result = 0;
(gdb) n <--------------------- 單條語句執行,next命令簡寫。
18 for(i=1; i<=100; i++)
(gdb) n
20 result += i;
(gdb) n
18 for(i=1; i<=100; i++)
(gdb) n
20 result += i;
(gdb) c <--------------------- 繼續執行程式,continue命令簡寫。
continuing.
result[1-100] = 5050 <----------程式輸出。
breakpoint 2, func (n=250) at tst.c:5
5 int sum=0,i;
(gdb) n
6 for(i=1; i<=n; i++)
5 (gdb) p i <--------------------- 列印變數i的值,print命令簡寫。
$1 = 134513808
(gdb) n
8 sum+=i;
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p sum
$2 = 1
(gdb) n
8 sum+=i;
(gdb) p i
$3 = 2
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p sum
$4 = 3
(gdb) bt <--------------------- 檢視函式堆疊。
#0 func (n=250) at tst.c:5
#1 0x080484e4 in main () at tst.c:24
#2 0x400409ed in __libc_start_main () from /lib/libc.so.6
6(gdb) q <--------------------- 退出gdb。
gdb下watch的使用
這裡大概說下gdb除錯程式時,watch的使用。至於原理尚不清楚,以後再做補充,還請見諒。watch通常需要和break,run,continue聯合使用。下面舉例說明 如下 include int main 除錯的時候過程如下 gdb l 1 include 2 3 int main 4 gdb ...
Linux下gdb的使用
一 編譯檔案生成可執行檔案 如果想用偵錯程式執行乙個可執行檔案,在用gcc編譯時必須加上 g選項。加上 g選項以後,gcc在編譯是會做以下額外的操作 1.建立符號表,符號表包含了程式中使用的變數名稱的列表。2.關閉所有的優化機制,以便程式執行過程中嚴格按照原來的c 進行。二 ulimit c unl...
linux下gdb的除錯使用
1.gdb除錯的物件是可執行檔案,而不是程式的源 因此在使用gcc編譯器時 需加 g選項。告訴gcc編譯器加入除錯資訊。例如 gcc g test.c o test 2.除錯gdb的格式是 例如 gdb test 3.在啟動gdb後,會顯示一段版權說明,如果要不顯示 加入 q即可 例如 gdb q ...