Gdb 漂亮打印机在 Ubuntu 16.04 中不起作用

Gdb 漂亮打印机在 Ubuntu 16.04 中不起作用

我曾在 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):                                                                                                                                         

相关内容