在老版本的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。
如果不存在当前目录,下载方法
终端输入
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的效果如下:
测试代码: