【发布时间】: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而不是-g,whatis $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++