GDB调试STL中的相关容器

在老版本的GDB中(应该是7.0以前),调试STL容器还是比较麻烦的,直接print会出来一大串无用的信息

GDB调试STL中的相关容器_第1张图片


对此比较好的解决方法是使用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。

如果不存在当前目录,下载方法

终端输入

svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch/libstdc++-v3/python(需要svn工具,没有自行百度下载)

然后你会在当前目录下得到一个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中的相关容器_第2张图片







你可能感兴趣的:(GDB调试STL中的相关容器)