【问题标题】:gdb pretty printer for stl throw a "TypeError"用于 stl 的 gdb 漂亮打印机抛出“TypeError”
【发布时间】:2014-06-22 15:08:36
【问题描述】:

我关注了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

它抛出一个“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

我的 .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

请帮帮我,非常感谢。

【问题讨论】:

    标签: python c++ linux stl gdb


    【解决方案1】:

    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++ 来源(又名“主干”)相匹配的漂亮打印机,而您的 libstdc++ 本身已经使用了一年多,并且来自 gcc-4.8

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

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

    【讨论】:

    • 感谢您的回复。您的解决方案不适用于 Ubuntu 14.10,它使用 python 3 for gdb。我现在已经解决了这个问题,经过搜索找到github.com/Manicqin/gdb_printers__python,可以完美解决我的问题。
    【解决方案2】:
    git clone https://github.com/Manicqin/gdb_printers__python python  
    

    这样就完美解决问题了。

    没有 TypeError 也没有 python 3 问题。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-26
        • 2013-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多