GDB除錯STL中的相關容器

2021-08-14 02:14:49 字數 1210 閱讀 7518

在老版本的gdb中(應該是7.0以前),除錯stl容器還是比較麻煩的,直接print會出來一大串無用的資訊

對此比較好的解決方法是使用stl-views-1.0.3.gdb,然後進入gdb,輸入source stl-views-1.0.3.gdb(假設stl-views-1.0.3.gdb在你當前目錄下),或者將stl-views-1.0.3.gdb拷貝到home下,改名為stl-views-1.0.3.gdbinit,gdb啟動時會自動掃瞄.gdbinit檔案,可以省去一道source的過程,之後在gdb中除錯相關容器,如string:輸入pstring teststr,就可以顯示出除錯資訊。

新版本gdb(7.0之後),加入了python寫的pretty print,一般來說你的gdb會自帶,如果沒有的話,先看你的/usr/share/gcc-4.8.5/python這個目錄下是否存在,如果存在,則編寫乙個stlview.gdbinit檔案,裡面輸入

python  

import sys 

sys.path.insert(0, '/usr/share/gcc-4.8.5/python')  

from libstdcxx.v6.printers import register_libstdcxx_printers  

register_libstdcxx_printers (none)  

end然後拷貝到home下,或者啟動gdb,輸入source stlview.gdbinit。

終端輸入

然後你會在當前目錄下得到乙個python檔案,然後將sys.path.insert(0, '/usr/share/gcc-4.8.5/python')  這串**中的'/usr/share/gcc-4.8.5/python'改為python檔案路徑,之後做法相同,如果這兩種方法都還不行,建議你首先確定下你的stl版本,當前的方法好像只支援sgi stl的除錯。

使用pretty printer的效果如下:

測試**:

在gdb中檢視stl容器

在gdb中檢視stl容器 本文主要內容來自於http sourceware.org gdb wiki stlsupport 目前,gdb預設不能print出stl容器的內容,但是網上有好多種方案來做這件事,我試用了一下,比較方便的是以下兩種 pvector,plist,pmap,pset,pdequ...

gdb除錯相關

3.2.1 斷點的工作原理 在本書的所有地方都使用了status breakpoint異常,尤其是在本章中,但卻沒有很明確地解釋這個異常的引發方式。現在,我們就來解釋如何在程序中產生這個異常。在x86指令集中包含了乙個特殊的指令int 3,這個指令將在處理器上產生硬體中斷status breakpo...

gdb除錯相關

core檔案用於gdb除錯比較有用 你可以用 ulimit a 看一下core file size 如果是0,可以用ulimit c unlimited 來指定大小不限,或者指定固定的大小 採用automake方式時,要在makefile.am中加入 xx ldflags static libtoo...