为什么 lldb 漂亮打印机不适用于 MacOS 上的 GNU GCC 编译程序?

Art*_*eev 5 c++ debugging gcc lldb

有人知道,为什么 lldb 漂亮的打印机不能用于 MacOS 上的 GNU GCC 编译程序吗?

我有一个简单的 C++ 程序,我使用 GCC 10.2(来自 Homebrew)编译该程序,内容如下CXX_FLAGS--std=c++17 -g -O0

#include <vector>

int main() {
    std::vector<int> v = {1, 2, 3};
    std::cout << v[0];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试检查变量时v,我得到以下结果:

(vector<int, allocator<int> >) $0 = {
  _Vector_base<int, allocator<int> > = {
    _M_impl = {
      _Vector_base<int, allocator<int> >::_Vector_impl_data = {
        _M_start = 0x00000001005062a0
        _M_finish = 0x00000001005062ac
        _M_end_of_storage = 0x00000001005062ac
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

之前没有std::前缀vector,因此没有为该类型添加漂亮的打印机(默认情况下它处理"^(std::__1::)vector<.+>$")。AFAIU,默认情况下,LLDB 中的漂亮打印机启用libc++,而 GCC 使用libstdc++.

有人知道如何解决这个问题并使漂亮的打印机适用于 LLDB 中的 GNU GCC 编译程序吗?

Art*_*eev 4

-gdwarf-3std::选项解决了调试过程中缺少前缀的原始问题,因此使用该标志漂亮的打印机可以正常工作。

PS-gdwarf-4让漂亮的打印机也能正常工作