gdb除錯基本技巧

2022-06-28 10:27:07 字數 2050 閱讀 2758

本文主要介紹一些簡單的、常用的gdb除錯技巧。

環境:gnu gdb (gdb) red hat enterprise linux (7.2-60.el6_4.1)

1 #include 2

3int test_func2(void) 4

1011

void test_func1(int

flag)12;

14int b = 12;15

int i = 0;16

17if (flag == 0

) 20

21for (i = 0; i < sizeof(a)/sizeof(int); i++)

2425

for (i = 0; i < sizeof(a)/sizeof(int); i++)

2829 printf("\n"

);30

31test_func2();

3233}34

3536

37int main(void)38

view code

下面除錯過程中的**就是以上**。

編譯:gcc -g test_gdb.c  (注:必須加上-g引數,表示在檔案中加入除錯資訊)

加入乙個斷點

(gdb) b test_func1

(gdb) break test_func2

注:兩種方式是等價的,一般簡寫為b

加入乙個斷點並設定進入條件

(gdb) b test_func1 if flag == 1

顯示斷點資訊

(gdb) info b

(gdb) info breakpoints

失能乙個斷點

(gdb) disable b 2

注:disable了的停止點,gdb不會刪除,需要時,enable即可。

使能乙個斷點

(gdb) enable b 2

刪除乙個斷點

執行程式

run或r

列出源**

list或l

單步除錯

next或n

單步跟蹤,進入函式

step或s

在指定行停住

(gdb) b 25

繼續執行

continue或c

檢視某一變數值

(gdb) print b

(gdb) print a[0]

檢視靜態陣列

(gdb) print /x a

注:/x表示以十六進製制顯示

檢視動態陣列

(gdb) print /x *a@4

檢視記憶體

(gdb) x/4xh a

語法格式:x/

n、f、u是可選的引數。

n是乙個正整數,表示顯示記憶體的長度,也就是說從當前位址向後顯示幾個位址的內容。

f 表示顯示的格式,參見上面。如果位址所指的是字串,那麼格式可以是s,如果位址是指令位址,那麼格式可以是i。

u 表示從當前位址往後請求的位元組數,u引數可以用下面的字元來代替,b表示單位元組,h表示雙位元組,w表示四位元組,g表示八字節。

gdb資料顯示格式:

x按十六進製制格式顯示變數

d按十進位制格式顯示變數

u按十六進製制格式顯示無符號整型

o按八進位制格式顯示變數

t按二進位制格式顯示變數

a按十六進製制格式顯示變數

c按字元格式顯示變數

f按浮點數格式顯示變數

檢視陣列compare_zero的記憶體的64個位址以十進位制顯示,每個位址請求單個位元組。

直接使用quit命令就可退出除錯。

GDB除錯技巧

在公司工作了一段時間,發現 b s結構的 除錯很麻煩,經常用的手段是通過 printf 打一串訊息來進行跟蹤,然後估計問題出在 通過逐步新增 printf 語句,獲得越來越多的資訊最終確定問題的根源。我感覺這樣比較麻煩,如果能把 gdb的單步除錯功能用上就好了。工作之餘,做了一定的嘗試,希望對跟我一...

GDB除錯技巧

談到gdb,不能不對他的強大功能所折服,在我所用過的所有偵錯程式中,這實在是乙個強大的除錯工具,今天就說說gdb的簡單用法。gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像vc bcb等ide的除錯,但如果你是在 unix平台下做軟體,你會發現...

gdb除錯技巧

1 以結構體形式訪問某個記憶體 print type addr 其中type是結構體型別,addr是記憶體的位址 2 顯示符號表 info symbol info symbol symbol addr symbol addr為對應的位址 print 符號名 3 檢視型別的原型定義 有時候在除錯大型程...