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

标签 python gdb codeblocks

我正在使用 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/

相关文章:

python - 在 Python 桌面应用程序中的何处存储用户凭据?

std::string 函数中的 C++ 段错误

c - 如何让gdb在某些条件下设置断点?

c 编程 scanf 不会读取输入两次

c++ - 代码块上的 Iostream 问题?

python - Elasticsearch 采样聚合未知 key

python - 为什么 PyQt 的 pyuic 会忽略默认边距?

python - Rpy2:如何将字典列表转换为 R 数据框

linux-kernel - 调试Linux内核预解压阶段

c - 警告 : array subscript has type char