(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...