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

Mac*_*rel 2 c++ python linux gdb stl

我按照STL支持工具发现它不能在我的系统上运行.我使用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
Run Code Online (Sandbox Code Playgroud)

它抛出了"TypeError",只有打印长度和容量.我的g ++和gdb版本:

g++ --version
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
gdb --version 
GNU gdb (Ubuntu 7.7-0ubuntu3.1) 7.7
Run Code Online (Sandbox Code Playgroud)

我的.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
Run Code Online (Sandbox Code Playgroud)

请帮帮我,非常感谢你.

Emp*_*ian 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
Run Code Online (Sandbox Code Playgroud)

你现在有漂亮的打印机,匹配最新的 libstdc++来源(又名"后备箱"),而你libstdc++自己已经超过一年了,来自gcc-4.8.

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

svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch/libstdc++-v3/python
Run Code Online (Sandbox Code Playgroud)