【问题标题】:Bug in gdb libstdc++ pretty-printers with gcc 8 installed from macports (macOS)从 macports (macOS) 安装 gcc 8 的 gdb libstdc++ 漂亮打印机中的错误
【发布时间】:2019-03-18 10:44:07
【问题描述】:

我按照GDB Wiki 中的描述设置了 gdb libstdc++ 漂亮打印机。但是漂亮的打印不起作用,gdb 一直在打印原始数据。

我更改了 printers.py 来修复它:

--- python/libstdcxx/v6/printers.py.old 2018-10-13 13:57:11.000000000 +0300
+++ python/libstdcxx/v6/printers.py 2018-10-13 14:35:55.000000000 +0300
@@ -1306,2 +1306,4 @@
     def add(self, name, function):
+        if (name.startswith('std::')):
+            self.add(name[5:], function)
         # A small sanity check.

补丁使打印机能够平等地处理 std::xxx 和 xxx(例如 std::vector 和 vector)。补丁有帮助!

为什么有帮助?错误在哪里?使用通过 macports 安装的 gdb 8.0.1、gcc 8.2.0。

【问题讨论】:

  • “我按照 GDB Wiki 中的描述设置了 gdb libstdc++ 漂亮打印机。” 你到底做了什么?大多数信息已经过时,对于现代版本的 GDB 和 GCC 来说应该是不必要的,因为打印机已经带有 GCC。
  • 我不知道为什么,但是使用-gdwarf-3 而不是-gwhatis $vector 的双向量正确显示std::vector<double> 而不是vector<double, std::allocator<double> >。根据gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html-g 在 macOS 上默认为-gdwarf-2。但是我不知道 DWARF 级别如何影响 GDB 已知的类型...

标签: c++ gcc gdb macports libstdc++


【解决方案1】:

这是 OS X 上的 a known issue,但我无法自己调试它,因为我不使用 OS X。

问题似乎与 GCC 输出到 OS X 二进制文件的调试信息有关。在 OS X 上,调试信息中显示的类型与漂亮的打印机所期望的不匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    相关资源
    最近更新 更多