用于stl的gdb漂亮打印机抛出一个" TypeError"

时间:2014-06-22 15:08:37

标签: python c++ linux stl gdb

我跟着STL Support Tools,发现它无法在我的系统上运行。 我使用gnome Ubuntu 14.04。我试过这个:

(gdb) p vct
Python Exception <class 'TypeError'> iter() returned non-iterator of type '_iterator': 
$1 = std::vector of length 20, capacity 32

它引发了一个&#34; TypeError&#34;,并且只打印长度和容量。 我的g ++和gdb版本:

g++ --version
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
gdb --version 
GNU gdb (Ubuntu 7.7-0ubuntu3.1) 7.7

我的.gdbinit:

python
import sys 
sys.path.insert(0,'/home/james/bin/gdb_printers/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

请帮助我,非常感谢。

3 个答案:

答案 0 :(得分:5)

  

sys.path.insert(0,'/home/james/bin/gdb_printers/python')

你是如何得到/home/james/bin/gdb_printers/python的?

假设您在wiki上遵循(不准确)说明,并执行了此操作:

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

您现在拥有与最新 libstdc++来源(又名&#34; trunk&#34;)相匹配的漂亮打印机,而您的libstdc++本身已超过一年旧的,来自gcc-4.8

要获得正确的漂亮打印机,您需要从匹配的gcc分支获取它们。我相信正确的命令是:

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

答案 1 :(得分:0)

git clone https://github.com/Manicqin/gdb_printers__python python  

这将完美地解决问题。

没有TypeError而且没有python 3问题。

答案 2 :(得分:0)

请注意,这些说明实际上仅适用于过去(在打包之前)或非Linux系统上的人员。您典型的现代Linux发行版将以“正常工作”的方式安装这些调试脚本,而无需您进行任何额外配置。