Python GDB:没有名为';打印机';

Python GDB:没有名为';打印机';,python,c++,stl,gdb,pretty-print,Python,C++,Stl,Gdb,Pretty Print,我试图在Ubuntu 14.04上的GDB中添加STL。有关这些工具的一些详细信息: 操作系统:Ubuntu 14.04 gdb版本:7.7 python版本:2.7.6 python3版本:3.4.0 但在我完全按照说明书所说的进行设置之后。我仍然会遇到以下错误: Traceback (most recent call last): File "<string>", line 3, in <module> File "/home/jerry/myLib/gdb_

我试图在Ubuntu 14.04上的GDB中添加STL。有关这些工具的一些详细信息:

操作系统:Ubuntu 14.04

gdb版本:7.7

python版本:2.7.6

python3版本:3.4.0

但在我完全按照说明书所说的进行设置之后。我仍然会遇到以下错误:

Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "/home/jerry/myLib/gdb_stl_support/python/libstdcxx/v6/__init__.py", line 19, in <module>
    from printers import register_libstdcxx_printers
ImportError: No module named 'printers'
/home/jerry/.gdbinit:6: Error in sourced command file:
Error while executing Python code.
Reading symbols from main...done.
回溯(最近一次呼叫最后一次):
文件“”,第3行,在
文件“/home/jerry/myLib/gdb_stl_support/python/libstdcxx/v6/_init__.py”,第19行,在
从打印机导入寄存器\u libstdcxx\u打印机
ImportError:没有名为“打印机”的模块
/home/jerry/.gdbinit:6:源命令文件中出现错误:
执行Python代码时出错。
从主菜单中读取符号…完成。

然后我仔细检查了我的漂亮打印安装目录。在
/home/jerry/myLib/gdb_stl_support/python/libstdcxx/v6/
目录下,我可以清楚地看到我有printers.py文件。我还查看了printers.py的内容,我确信它也有
register\u libstdcxx\u printers
类。为什么python解释器仍然抱怨
打印机
模块丢失?这对我来说真的很奇怪。

我自己刚尝试了一些东西,幸运的是,现在它起作用了。至少它可以按预期打印出地图和矢量内容。以下是我所做的:

因为它抱怨找不到
printer.py
模块,所以我想我应该告诉python解释器这个文件的位置。所以我首先在我的~/.gdbinit中添加了这一行:
sys.path.append(“/home/jerry/myLib/gdb\u stl\u support/python/libstdcxx/v6”)

(在
sys.path.insert(0,'/home/jerry/myLib/gdb_stl_support/python')行之后)

然后再次运行gdb,我得到以下错误:

Traceback (most recent call last):
  File "<string>", line 5, in <module>
  File "/home/jerry/myLib/gdb_stl_support/python/libstdcxx/v6/printers.py", line 1247, in register_libstdcxx_printers
    gdb.printing.register_pretty_printer(obj, libstdcxx_printer)
  File "/usr/share/gdb/python/gdb/printing.py", line 146, in register_pretty_printer
    printer.name)
RuntimeError: pretty-printer already registered: libstdc++-v6
/home/jerry/.gdbinit:7: Error in sourced command file:
Error while executing Python code.
回溯(最近一次呼叫最后一次):
文件“”,第5行,在
文件“/home/jerry/myLib/gdb_stl_support/python/libstdcxx/v6/printers.py”,第1247行,位于register_libstdcxx_打印机中
gdb.printing.register_pretty_打印机(obj,libstdcxx_打印机)
文件“/usr/share/gdb/python/gdb/printing.py”,第146行,在register\u pretty\u打印机中
打印机名称)
运行时错误:漂亮的打印机已注册:libstdc++-v6
/home/jerry/.gdbinit:7:源命令文件中出现错误:
执行Python代码时出错。
根据错误信息,我编辑了~/.gdbinit文件并注释了行
register\u libstdcxx\u printers(None)

然后在运行gdb之后,它就工作了


但我仍然想知道sys.path中的目录是否是递归搜索的?我的意思是,在我看来,python解释器应该是这样工作的:一旦您将一个目录添加到
sys.path
,那么该目录下的子目录也将被搜索到模块文件。

否,没有“搜索”模块文件。如果sys.path中的目录包含其他目录,则这些目录必须是包,您才能从中导入模块。但是您需要在import语句中给出包名。例如,“import-gdb”和“import-gdb.printing”有效,但“import-printing”无效。@deets感谢您提到python中的概念。我不知道python正在组织这样的子模块。编辑时,我需要编辑
python/libstdcxx/v6/_init_uuuuuuuuu.py
并将
从打印机导入寄存器libstdcxx\u打印机
替换为
从打印机导入寄存器libstdcxx\u打印机
(我的GDB包括python 3.4)