【问题标题】:How to display C++ STL Containers in GDB/Nemiver in Linux如何在 Linux 的 GDB/Nemiver 中显示 C++ STL 容器
【发布时间】:2012-07-20 13:13:49
【问题描述】:

我使用的是 Linux (Ubuntu 11.10) 和 gdb 7.3 / Nemiver 0.8.2。
我想显示 STL 容器的内容,但到目前为止我还没有真正成功。

我应该使用其他可视化调试器(基于 gdb 更好)来显示 STL 容器变量吗?
我正在寻找一种支持容器组合的解决方案(即std::map<int, std::vector< std::pair< ... > > >)。

干杯

【问题讨论】:

  • 坦率地说,它实际上并不是真的可用。如果我必须使用一个糟糕的可视化调试器,我认为我最好使用裸 gdb。干杯
  • 还有insight,还有eclipse自带的调试环境。但我认为两者都是gdb 的包装器(如DDD)。
  • 最近的 GDB(例如 7.4)可以使用 Python 编写脚本,最近的 GCC -例如 4.7-(及其 stdc++ 库)甚至可以提供相关脚本来很好地显示 C++ 标准容器。
  • 你总是可以为你的容器/类写一个 .dump()。

标签: c++ linux stl gdb


【解决方案1】:

足够新的 GDB 版本支持来自 Python 的漂亮打印 API。这允许应用程序提供 Python 代码来自定义对象显示的某些方面。此代码旨在与 CLI(gdb 提示符下的“打印”)和 MI(GUI 使用或至少应该使用的界面)一起使用。

足够新的 GCC 版本为 libstdc++ 中的所有重要数据结构提供 Python 漂亮打印机。

最后一步是获取足够新的 nemiver 版本。我认为0.9.2有这个功能。

许多发行版提供 gdb 和 gcc 设置,以便在您的程序使用 libstdc++ 时自动激活漂亮的打印机。所以,也许仅仅升级 nemiver 对你来说就足够了。否则,网上有很多关于如何设置的文档。

【讨论】:

  • 具体哪个版本包含 gdb/gcc 的所有这些?
  • 您至少需要 gdb 7.0——虽然更新更好,因为已经修复了错误等。此外,它必须在启用 Python 支持的情况下构建。我忘记了哪个版本的 GCC 最先发布了漂亮的打印机。我认为是 4.5 或 4.6。您可以在源代码中查找名为“printers.py”的文件或安装树。
【解决方案2】:

下载以下文件-

https://github.com/jgarvin/joe-etc/blob/master/gdb/stl-views-1.0.3.gdb

来自 GDB -

# source <PATH>/stl-views-1.0.3.gdb

# pmap <map-object> <key-type> <value-type>

...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2010-09-24
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多