gdb除錯技巧

2021-07-26 05:40:01 字數 1073 閱讀 2155

(1)以結構體形式訪問某個記憶體:

print *(type *)addr

其中type是結構體型別,addr是記憶體的位址

(2)顯示符號表

info symbol

info symbol symbol_addr

symbol_addr為對應的位址

print 符號名

(3)檢視型別的原型定義:

有時候在除錯大型程式時,乙個型別往往可能有多種定義,實際是通過巨集定義區分的,如何檢視編譯以後到底用的哪乙個呢?

info types type_name

可顯示該型別的定義檔案,原型等資訊。

檢視結構體內容用ptype(prototype):

ptype 結構體型別

(4)檢視巨集定義

這個需要在編譯時在gcc的引數上加"-ggdb3"選項,具體資訊請參看"man gcc"查詢"-gvms",

print 巨集名,這種方式可以列印不帶引數的巨集,

帶有引數的巨集用info macro 巨集名,可以顯示巨集的詳細資訊。同時gdb提供展開巨集的功能:

macro expand 巨集。例如#define foo(bar)  extern bar,在gdb命令列下面執行

macro expand foo(func)得到 extern func

(5)手動停止除錯:

在程式執行時按ctrl+c即可停止程式,也可事先打好斷點。

info signals檢視gdb可處理的訊息

info handle檢視gdb處理的訊息

help  handle設定訊號處理函式

help signal

(6)在除錯python時,其物件的id就是其位址(這個在python的手冊上也講了,暫時用物件的位址表示其id),

我們可以在python的控制台呼叫

print id(物件名)

得到物件的位址,

在gdb中:

print *(pyobject *)物件位址

即可訪問其物件的記憶體結構了!

(7)總結

GDB除錯技巧

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

GDB除錯技巧

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

gdb除錯技巧

1 按結構體格式列印 set print pretty on 2.檢測點 watch 為表示式 變數 expr設定乙個觀察點。一量表示式值有變化時,馬上停住程式。rwatch 當表示式 變數 expr被讀時,停住程式。awatch 當表示式 變數 的值被讀或被寫時,停住程式。info watchpo...