2010-04-21 143 views
12

我有一个std :: map < std :: string,std :: string> cont;如何在gdb中打印std :: map值

我想在gdb中看到cont [“some_key”]。当我试图

p续[“some_ket”]

我得到这个消息:其中有一个还试图通过对operator []无法转换到函数需要什么参数。

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

+3

可惜。 gdb7.0可以直接打印:http://sourceware.org/gdb/wiki/STLSupport – 2010-04-21 16:36:59

+0

这是正确的答案。该功能已经存在,您只是使用尚未集成的旧版发行版。考虑使用最近的Fedora,或者从源代码构建工具(它可能只是gdb,尽管它可能还需要g ++和binutils)。 – 2012-07-21 16:48:00

回答

6

最新的gdb有python支持,所以可以很容易地编写一个函数来打印出任何stl结构的内容。但是,您必须学习API并编写脚本。幸运的是,gcc 4.5将提供所需的python脚本来让gdb智能地处理stl数据结构。

编辑:你不必等待GCC 4.5(顺便说一句,已经发布),你可以只是grab the code from SVN

1

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

+0

据我所知在调试过程中没有任何方法可以看到键值? – 2010-04-21 13:02:54

+0

不容易。 std :: map是一个复杂的数据结构。你可以关注(特定于实现的)私人成员,看看发生了什么,但这非常麻烦。 @艾迪的回答可能有帮助,但我还没有玩过那些东西。 – 2010-04-21 13:17:25

6

您可以编写自己的转储功能,并呼吁他们:

(gdb) call dump(m) 

看到这个线程: http://www.mail-archive.com/[email protected]/msg02109.html

我很好奇的GDB辅助宏。

+1

该[该线程的下一条消息](http://www.mail-archive.com/[email protected]/msg02189.html)显示了一个GDB宏,效果很好。随后的消息包含一些小的改进。 – mMontu 2015-06-09 16:37:03