漂亮的地图打印机

2024-06-24 12:15:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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}$

Tags: orghttpmapstringincludevaluetypewiki
2条回答

在我的系统中,_Rep_type不是std::map的公共类型(它是私有的typedef),所以脚本试图找出<yourmap>._M_t变量的类型,它的类型是_Rep_type。。。在

我试过了:

typedef std::map<int,int> map_t;
map_t m;
m.insert(map_t::value_type(3,4));

然后在gdb中,我可以像这样打印键3(下面是我链接的脚本中的print函数):

^{pr2}$

其中,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),然后我得到了合理的输出:

(gdb) pmap m int int
elem[0].left: $3 = 3
elem[0].right: $4 = 4

您使用什么编译器(以及哪个版本)来构建测试源代码?在

我猜这不是g++的最新版本。以下是我使用g++ 4.4.3-4ubuntu5得到的结果:

$ gdb -q ./a.out
Reading symbols from /tmp/a.out...done.
(gdb) b 12   
Breakpoint 1 at 0x400de3: file t.cc, line 12.
(gdb) r

Breakpoint 1, main () at t.cc:12
12   return 0;
(gdb) p mapInt2
$1 = std::map with 1 elements = {[3] = 4}

更新:

This is what I get for the version: g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3

我明白问题所在。您引用的说明不正确。在

特别是,指令建议:svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python,但问题是python代码到达了libstdc++内部,因此必须匹配这些内部结构(这就是为什么漂亮的打印机是GCC的一部分而不是GDB的一部分的原因,这是事实布鲁斯。班纳抱怨)。在

当你做一个新的svn co ...时,你得到了一个python代码的拷贝,它不再与你的libstdc++内部相匹配,这就是导致你问题的原因。在

特别是,svn log表示此处添加了find_type

^{pr2}$

这比^{晚了很多。然后,您要做的是获得与您的版本libstdc++匹配的漂亮打印机,如下所示:

svn co svn://gcc.gnu.org/svn/gcc/branches/gcc_4_4_3_release/libstdc++-v3/python

除了上面的命令将不起作用,因为gcc4.4.3早于漂亮的打印机。在

不管怎样,在4.4.3和4.6之间,std::map(以及大部分其他STL内部构件)的实现都没有改变,而且这个命令可以工作:

 svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch/libstdc++-v3/python

相关问题 更多 >