我曾在 Ubuntu 14.04 中使用 gdb 调试过 C++ 代码。当我将 stl 容器传递给 print 命令时,它会打印容器的内容。但一周前我升级到了 Ubuntu 16.04 LTS。现在那些漂亮的打印机无法正常工作。当我打印它们时,我得到的是那些未安装 python 打印机时得到的原始容器输出。
libstdcxx/v6/python.py
我的系统上有。libstdc++.so.6.0.21-gdb.py
自动加载文件夹中也有。当我在 gdb 中打印 info pretty-printer 时,我会得到一个 stl 打印机列表,所以我知道它们已经注册。但是,我的gdb
没有打印std::list
变量。我已启用 pretty-printer,并将 print pretty 设置为 on。
我的gcc
版本是 5.4,gdb
版本是 7.11.1。两者都是与 Ubuntu 16.04 一起安装的。我还没有手动构建它们。那么我遗漏了什么吗?
答案1
似乎在较新的 libstdcxx 中,容器(其中一些?)被移至 std::__cxx11:: 名称空间,现有漂亮打印机的现有模式匹配不再匹配。以下补丁添加了该模式并为我修复了它。
*** /usr/share/gcc-5/python/libstdcxx/v6/printers.py.orig 2016-08-08 16:49:58.000000000 +0000
--- /usr/share/gcc-5/python/libstdcxx/v6/printers.py 2016-11-08 23:25:23.620557354 +0000
***************
*** 1081,1086 ****
--- 1081,1087 ----
def add_container(self, base, name, function):
self.add_version(base, name, function)
self.add_version(base + '__cxx1998::', name, function)
+ self.add_version(base + '__cxx11::', name, function)
@staticmethod
def get_basic_type(type):