我用http://wiki.eclipse.org/CDT/User/FAQ#How_can_I_inspect_the_contents_of_STL_containers.3F配置了漂亮的打印机。它成功地用于vector和其他容器。但是,我无法像下面的示例那样检查地图:
#include <map>
#include <iostream>
using namespace std;
int main ()
{
map <int, string> mapIntToString;
map <int, int> mapInt2;
mapIntToString.insert (map <int, string>::value_type (3, "Three"));
mapInt2.insert (map <int, int>::value_type (3, 4));
return 0;
}
使用gdb打印时出现以下错误:
^{pr2}$
在我的系统中,
_Rep_type
不是std::map
的公共类型(它是私有的typedef),所以脚本试图找出<yourmap>._M_t
变量的类型,它的类型是_Rep_type
。。。在我试过了:
然后在
^{pr2}$gdb
中,我可以像这样打印键3
(下面是我链接的脚本中的print函数):其中,
std::map
中的_M_t
是_Rb_tree
类型,但在map中该类型不是公共的(您可以在map
头文件中看到这一点,特别是<path/to/std-headers/dir/bits/stl_map.h
头文件。在不确定这是否有帮助,基本上您正在加载的pretty print python函数似乎有问题。
我刚刚尝试从GNU GDB Debugger Command Cheat Sheet from yolinux.com添加
.gdbinit
的内容(我在google上搜索了gdb pretty print
),然后我得到了合理的输出:您使用什么编译器(以及哪个版本)来构建测试源代码?在
我猜这不是
g++
的最新版本。以下是我使用g++ 4.4.3-4ubuntu5
得到的结果:更新:
我明白问题所在。您引用的说明不正确。在
特别是,指令建议:
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
,但问题是python代码到达了libstdc++
内部,因此必须匹配这些内部结构(这就是为什么漂亮的打印机是GCC的一部分而不是GDB的一部分的原因,这是事实布鲁斯。班纳抱怨)。在当你做一个新的
svn co ...
时,你得到了一个python代码的拷贝,它不再与你的libstdc++
内部相匹配,这就是导致你问题的原因。在特别是,
^{pr2}$svn log
表示此处添加了find_type
:这比^{晚了很多。然后,您要做的是获得与您的版本
libstdc++
匹配的漂亮打印机,如下所示:除了上面的命令将不起作用,因为gcc4.4.3早于漂亮的打印机。在
不管怎样,在4.4.3和4.6之间,
std::map
(以及大部分其他STL内部构件)的实现都没有改变,而且这个命令可以工作:相关问题 更多 >
编程相关推荐