如何使用Eclipse / CDT调试C ++代码时更好地进行变量探索?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

使用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的值列表。有什么工具,插件或其他修改可以做到这一点?

提问于
用户回答回答于

你需要一个能够使用Python来漂亮打印结构的GDB版本。至少在使用mingw的windows上我知道这在默认安装中不提供。

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

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

用户回答回答于

那么,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
  2. 将以下内容添加到〜/ .gdbinit中。路径需要匹配上面的python模块签出的地方。因此,如果签出到/ home / maude / gdb_printers /,路径将如示例中所写: python import sys sys.path.insert(0, '/home/maude/gdb_printers/python') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end

路径应该是上面示例中需要调整的唯一元素。加载后,打印机支持的STL类应该以更易读的格式打印。要以旧式打印类,请在打印命令中使用/ r(raw)开关(即print / r foo)。这将打印类,就好像Python漂亮打印机没有加载一样。

扫码关注云+社区

领取腾讯云代金券