liunx下gdb的使用

2021-06-07 12:30:21 字數 2484 閱讀 2903

一般來說,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 ...