GDB漂亮打印ImportError:没有名为“ printers”的模块
问题内容:
我正在尝试在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.
然后,我仔细检查了我漂亮的打印安装目录。在该目录下/home/jerry/myLib/gdb_stl_support/python/libstdcxx/v6/
,我可以清楚地看到我有printers.py文件。而且我还查看了printers.py的内容,我确定它也具有register_libstdcxx_printers
该类。为什么python解释器仍然抱怨printers
模块丢失?这对我来说真的很奇怪。
问题答案:
我只是自己尝试了一些东西,幸运的是,现在它可以工作了。至少它可以按预期打印出地图和矢量内容。这是我所做的:
由于抱怨它找不到printer.py
模块,所以我认为应该告诉python解释器此文件所在的位置。所以我首先在我的〜/ .gdbinit中添加了这一行:
sys.path.append("/home/jerry/myLib/gdb_stl_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.
给定错误信息,我编辑了〜/ .gdbinit文件并注释了这一行register_libstdcxx_printers (None)
。
然后在运行gdb之后,它就可以工作了。
但是我仍然想知道是否以递归方式搜索sys.path中的目录?我的意思是,python解释器应按以下方式工作:在中添加一个目录后sys.path
,该目录下的子目录也将在其中搜索模块文件。