<p>您使用什么编译器(以及哪个版本)来构建测试源代码?在</p>
<p>我猜这不是<code>g++</code>的最新版本。以下是我使用<code>g++ 4.4.3-4ubuntu5</code>得到的结果:</p>
<pre><code>$ 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}
</code></pre>
<p><strong>更新:</strong></p>
<blockquote>
<p>This is what I get for the version: g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3</p>
</blockquote>
<p>我明白问题所在。您引用的说明<strong>不正确</strong>。在</p>
<p>特别是,指令建议:<code>svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python</code>,但问题是python代码到达了<code>libstdc++</code><em>内部</em>,因此<em>必须</em>匹配这些内部结构(这就是为什么漂亮的打印机是GCC的一部分而不是GDB的一部分的原因,这是事实布鲁斯。班纳抱怨)。在</p>
<p>当你做一个新的<code>svn co ...</code>时,你得到了一个python代码的拷贝,它不再与你的<code>libstdc++</code>内部相匹配,这就是导致你问题的原因。在</p>
<p>特别是,<code>svn log</code>表示此处添加了<code>find_type</code>:</p>
^{pr2}$
<p>这比^{<cd9>晚了很多。然后,您要做的是获得与您的版本<code>libstdc++</code>匹配的漂亮打印机,如下所示:</p>
<pre><code>svn co svn://gcc.gnu.org/svn/gcc/branches/gcc_4_4_3_release/libstdc++-v3/python
</code></pre>
<p>除了上面的命令将不起作用,因为gcc4.4.3早于漂亮的打印机。在</p>
<p>不管怎样,在4.4.3和4.6之间,<code>std::map</code>(以及大部分其他STL内部构件)的实现都没有改变,而且这个命令<em>可以</em>工作:</p>
<pre><code> svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch/libstdc++-v3/python
</code></pre>