gpt4 book ai didi

python - gdb 运行时错误 : pretty-printer already registered: libstdc++-v6

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:44 40 4
gpt4 key购买 nike

我正在使用 Code::Blocks 并希望启用 gdb python。所以我关注了 C::B wiki http://wiki.codeblocks.org/index.php?title=Pretty_Printers配置它。

我的 pp.gdb 与 wiki 中的相同,只是我将路径替换为我的 printers.py 路径。

python
import sys
sys.path.insert(0, 'C:/Program Files (x86)/mingw-builds/x32-4.8.1-posix-dwarf-rev3/mingw32/share/gcc-4.8.1/python/libstdcxx/v6')
from printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

然后我测试了一下:

(gdb) source C:\Program Files (x86)\mingw-builds\x32-4.8.1-posix-dwarf-rev3\mingw32\bin\pp.gdb 

错误信息显示:

Traceback (most recent call last):
File "<string>", line 4, in <module>
File "C:/Program Files (x86)/mingw-builds/x32-4.8.1-posix-dwarf-rev3/mingw32/
share/gcc-4.8.1/python/libstdcxx/v6/printers.py", line 911, in register_libstdcxx_printers
gdb.printing.register_pretty_printer(obj, libstdcxx_printer)
File "c:\program files (x86)\mingw-builds\x32-4.8.1-posix-dwarf-rev3\mingw32\
share\gdb/python/gdb/printing.py", line 146, in register_pretty_printer
printer.name)
RuntimeError: pretty-printer already registered: libstdc++-v6
C:\Program Files (x86)\mingw-builds\x32-4.8.1-posix-dwarf-rev3\mingw32\bin\pp.gd
b:6: Error in sourced command file:
Error while executing Python code.

我该如何解决?

最佳答案

今天,在我将 libstdcxx 的 pretty 从旧的 gcc4.7.x 版本更新到 gcc 的主干 HEAD 版本以解决其他一些问题后,我也看到了这个类似的问题。

我也在使用 Codeblocks,我的自定义 gdb 脚本中有这两行。

from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)

请注意,在 gdb 启动时,我已经将 -nx 选项解析为 gdb。调整了一段时间后,我发现 libstdcxx 的 pretty-print 在 from...import... 行后自动加载并注册。因此,作为一种解决方案,您可以只注释掉第二行,这里一切正常。

from libstdcxx.v6.printers import register_libstdcxx_printers
#register_libstdcxx_printers (None)

此外,我认为 GDB 的官方 wiki STLSupport - GDB Wiki和 Codeblocks 的官方维基 Pretty Printers - CodeBlocks应该更新以说明此问题。

编辑:我刚刚看到文件:来自 GCC svn trunk 的 libstdcxx\v6__init__.py(也许,它是最近添加的),我看到它有代码:

# Load the pretty-printers.
from printers import register_libstdcxx_printers
register_libstdcxx_printers(gdb.current_objfile())

所以,我认为这段代码会自动注册打印机,因此您不需要显式调用 register_libstdcxx_printers (None)

关于python - gdb 运行时错误 : pretty-printer already registered: libstdc++-v6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18289377/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com