使用Eclipse和CDT调试C++代码的变量窗口很麻烦,而且对于在标准模板库或boost (例如shared_ptr)中定义的类型来说,信息不是很丰富。
这只是一个std::vector的示例:
bar {…}
std::_Vector_base<TSample<MyTraits>, std::allocator<TSample<MyTraits> > >
_M_impl {…}
std::allocator<TSample<MyTraits> > {…}
_M_start 0x00007ffff7fb5010
_M_finish 0x00007ffff7fd4410
_M_end_of_storage 0x00007ffff7fd5010
即使这些关于这些类型内部结构的信息可能有用,但在几乎任何情况下,我都希望在这里有一个更清晰的表示,即std::vector的值列表。有没有什么工具、插件或其他修改可以做到这一点呢?
编辑
以下解决方案不适用于linux。我用的是ubuntu14.04,eclipse,g++,gdb。
我找不到gdb-python包,而且linux不使用mingw。
发布于 2012-12-18 06:23:37
您需要一个能够使用python来美化打印结构的GDB版本。我知道,至少在使用mingw的windows上,默认安装中不提供此功能。
漂亮的打印机是python模块,它告诉gdb如何显示给定的结构。您可以编写自己的打印机,但已经有STL打印机可供下载。
要让漂亮的打印机在Windows上运行(说明应该与其他操作系统类似):
前提条件
http://www.python.org/download/
http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/
Installation:
mingw-get通过键入以下命令,将gdb-python
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
Python
导入sys
sys.path.insert(0,‘C:/目录’)
从libstdcxx.v6导入register_libstdcxx_printers
register_libstdcxx_printers (无)
结束
Eclipse设置
就是这样,像正常一样调试,stl结构应该更容易阅读。
发布于 2011-02-01 20:46:55
好吧,gdb本身并不支持STL容器。你不能说这是不正确的,因为它会暴露STL对象的内部工作方式,但大多数时候这不是我们想要的,对吧?
如果你使用的是gdb 7.0,你可以利用漂亮的打印机。这个网站http://sourceware.org/gdb/wiki/STLSupport有一个关于如何设置它们的非常简单的教程。我复制了下面你感兴趣的部分:
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
python从libstdcxx.v6导入sys打印机(0,‘/home/maude/gdb_sys.path.insert/python’)。打印机导入register_libstdcxx_printers register_libstdcxx_printers (None) end
路径应该是上面示例中唯一需要调整的元素。加载后,打印机支持的STL类应以更易读的格式打印。要以旧样式打印类,请在打印命令中使用/r (raw)开关(例如,print /r foo)。这将打印类,就像没有加载Python漂亮打印机一样。
由于您使用的是eclipse cdt,所以不要忘记将调试配置指向.gdbinit文件。在创建新的调试配置时,转到Debugger选项卡,并将.gdbinit文件的路径放在"GDB command file“字段中。
我希望这对你有帮助!
发布于 2013-10-03 19:49:15
在调试视图的变量列表中展开向量:
"vector_name"
-> std::_Vector_base<"datatype">
-> _M_impl
然后右键单击_M_start
并选择“显示为数组...”,键入其长度,然后单击确定。现在,您可以展开向量的每一项。
https://stackoverflow.com/questions/3651862
复制相似问题