如何在 GDB 中打印 C 向量的元素?

新手上路,请多包涵

我想在 GDB 中检查 std::vector 的内容,我该怎么做?为简单起见,假设它是 std::vector<int>

原文由 John Carter 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

要查看向量 std::vector myVector 内容,只需输入 GDB:

 (gdb) print myVector

这将产生类似于以下内容的输出:

 $1 = std::vector of length 3, capacity 4 = {10, 20, 30}

要实现上述目标,您需要拥有 gdb 7(我在 gdb 7.01 上对其进行了测试)和一些 python 漂亮的打印机。这些安装过程在 gdb wiki 上进行了描述。

更重要的是,在上面安装之后,它适用于 Eclipse C++ 调试器 GUI(以及任何其他使用 GDB 的 IDE,我认为)。

原文由 Michał Oniszczuk 发布,翻译遵循 CC BY-SA 4.0 许可协议

在调试时“观察”STL 容器有些问题。这是我过去使用过的 3 种不同的解决方案,它们都不是完美的。

  1. 使用来自 http://clith.com/gdb_stl_utils/ 的 GDB 脚本 这些脚本允许您打印几乎所有 STL 容器的内容。问题是这不适用于嵌套容器,如一堆集合。

  2. Visual Studio 2005 对观看 STL 容器提供了极好的支持。这适用于嵌套容器,但这仅适用于 STL 的实现,如果您将 STL 容器放入 Boost 容器中则不起作用。

  3. 在调试时为要打印的特定项目编写自己的“打印”函数(或方法),并在 GDB 中使用“调用”来打印项目。请注意,如果您的 print 函数没有在代码中的任何位置调用,g++ 将执行死代码消除,并且 GDB 将找不到“print”函数(您将收到一条消息,指出该函数已内联)。所以用 -fkeep-inline-functions 编译

原文由 Nikhil 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题