如何在gdb中打印std::map的值

17

我有一个 std::map<std::string, std::string> 类型的 cont;

我想在 gdb 中查看 cont["some_key"]。当我尝试输入

p cont["some_key"]

时,出现如下错误信息:One of the arguments you tried to pass to operator[] could not be converted to what the function wants。

我使用的是 GNU gdb Red Hat Linux (6.3.0.0-1.162.el4rh) 版本。谢谢。


3
遗憾的是,gdb7.0可以直接打印它:http://sourceware.org/gdb/wiki/STLSupport。 - Johannes Schaub - litb
这是正确的答案。该功能已经存在,只是您正在使用未集成它的旧发行版。考虑使用最新的Fedora,或者从源代码构建工具(可能只是gdb,但也有可能需要g ++和binutils)。 - Andy Ross
3个回答

7
最新的gdb已经支持python,因此可以轻松编写一个函数来打印任何stl结构的内容。但是你需要学习API并编写脚本。幸运的是,gcc 4.5将附带所需的python脚本,以便让gdb智能处理stl数据结构。
编辑:你不必等待GCC 4.5(顺便说一句,它已经发布了),你可以直接从SVN 获取代码

6

1
该线程中的下一条消息包含一个非常有效的GDB宏。随后的消息包含了一些小的改进。 - mMontu

1

Gdb不理解C++运算符重载。


据我了解,在调试过程中没有办法查看键值对? - Davit Siradeghyan
不容易。std::map 是一个复杂的数据结构。你可以跟随(实现特定的)私有成员并查看发生了什么,但这是相当费力的。@Eddy 的答案可能有所帮助,但我完全没有尝试过那些东西。 - Marcelo Cantos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接