dul*_*shi 3 python gdb codeblocks
我正在使用Code :: Blocks并希望启用gdb python.所以我按照C :: B wiki http://wiki.codeblocks.org/index.php?title=Pretty_Printers进行配置.
我的pp.gdb与wiki中的相同,只不过我将路径替换为printer.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
Run Code Online (Sandbox Code Playgroud)
然后我测试了它:
(gdb) source C:\Program Files (x86)\mingw-builds\x32-4.8.1-posix-dwarf-rev3\mingw32\bin\pp.gdb
Run Code Online (Sandbox Code Playgroud)
并且错误消息显示:
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.
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
今天,我也看到了类似的问题,在我将旧的gcc4.7.x版本的libstdcxx更新到gcc的trunk HEAD版本之后,修复了其他一些问题.
我也在使用Codeblocks,我在自定义的gdb脚本中有这两行.
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
Run Code Online (Sandbox Code Playgroud)
请注意,我已经-nx在启动时将选项解析为gdb.调整一段时间之后,我发现libstdcxx的漂亮打印机会自动加载并from...import...在行后注册.所以,作为一个解决方案,你可以只注释掉第二行,一切都运行正常.
from libstdcxx.v6.printers import register_libstdcxx_printers
#register_libstdcxx_printers (None)
Run Code Online (Sandbox Code Playgroud)
此外,我认为GDB的官方维基STLSupport - GDB Wiki和Codeblocks的官方维基漂亮打印机 - CodeBlocks应该更新以说明这个问题.
编辑:我只看到文件:libstdcxx\v6__init __.py来自GCC svn trunk(也许,它最近被添加),我看到它有代码:
# Load the pretty-printers.
from printers import register_libstdcxx_printers
register_libstdcxx_printers(gdb.current_objfile())
Run Code Online (Sandbox Code Playgroud)
所以,我认为这段代码会自动注册打印机,所以你不需要显式调用register_libstdcxx_printers (None).
| 归档时间: |
|
| 查看次数: |
2653 次 |
| 最近记录: |