首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在使用Eclipse/CDT调试C++代码时更好地探索变量

在使用Eclipse/CDT调试C++代码时更好地探索变量
EN

Stack Overflow用户
提问于 2010-09-06 21:33:25
回答 6查看 22.1K关注 0票数 71

使用Eclipse和CDT调试C++代码的变量窗口很麻烦,而且对于在标准模板库或boost (例如shared_ptr)中定义的类型来说,信息不是很丰富。

这只是一个std::vector的示例:

代码语言:javascript
复制
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。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-12-18 06:23:37

您需要一个能够使用python来美化打印结构的GDB版本。我知道,至少在使用mingw的windows上,默认安装中不提供此功能。

漂亮的打印机是python模块,它告诉gdb如何显示给定的结构。您可以编写自己的打印机,但已经有STL打印机可供下载。

要让漂亮的打印机在Windows上运行(说明应该与其他操作系统类似):

前提条件

  • 确保在系统路径中安装了Python2.7。

http://www.python.org/download/

  • 确保安装了MinGW-get

http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/

  • 确保已安装SVN客户端

Installation:

  • 打开命令外壳并键入:

mingw-get通过键入以下命令,将gdb-python

  • When及其完成的cd安装到本地目录并安装打印机:

svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

  • Open该目录(如果需要,请在文本编辑器中创建它),然后键入以下内容,将“C:/ .gdbinit”替换为您将打印机检入到的文件夹。

Python

导入sys

sys.path.insert(0,‘C:/目录’)

从libstdcxx.v6导入register_libstdcxx_printers

register_libstdcxx_printers (无)

结束

Eclipse设置

  • 转到窗口>首选项> C/C++ >调试> GDB
  • ,其中显示GDB调试器将路径放置到启用了python的GDB,它很可能位于名为gdb-python27.exe
  • Where的/bin文件夹中。它显示GDB命令文件将您先前创建的.gdb初始化文件的路径放入其中。

就是这样,像正常一样调试,stl结构应该更容易阅读。

票数 29
EN

Stack Overflow用户

发布于 2011-02-01 20:46:55

好吧,gdb本身并不支持STL容器。你不能说这是不正确的,因为它会暴露STL对象的内部工作方式,但大多数时候这不是我们想要的,对吧?

如果你使用的是gdb 7.0,你可以利用漂亮的打印机。这个网站http://sourceware.org/gdb/wiki/STLSupport有一个关于如何设置它们的非常简单的教程。我复制了下面你感兴趣的部分:

  1. 将最新的Python libstdc++打印机签出到您机器上的某个位置。在本地目录中,执行以下操作:

svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

  • Add以下内容到您的~/.gdbinit。路径需要与上面的python模块的签出位置相匹配。因此,如果签出到: /home/maude/gdb_printers/,则路径将如示例中所示:

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“字段中。

我希望这对你有帮助!

票数 21
EN

Stack Overflow用户

发布于 2013-10-03 19:49:15

在调试视图的变量列表中展开向量:

"vector_name" -> std::_Vector_base<"datatype"> -> _M_impl

然后右键单击_M_start并选择“显示为数组...”,键入其长度,然后单击确定。现在,您可以展开向量的每一项。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3651862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档