Xcode调试中的stl(libcxx)渲染器

Xcode调试中的stl(libcxx)渲染器,xcode,macos,lldb,libc++,Xcode,Macos,Lldb,Libc++,测试用例很简单:只有std::vector和一些元素。在调试会话期间,我甚至看不到向量的大小,根据lldb,向量的大小是0 我在谷歌上搜索了很多,我只发现lldb使用libcxx.py脚本使调试开发人员友好: def update(self): logger = lldb.formatters.Logger.Logger() try: self.start = self.valobj.GetChildMemberWithName('__begin_')

测试用例很简单:只有std::vector和一些元素。在调试会话期间,我甚至看不到向量的大小,根据lldb,向量的大小是0

我在谷歌上搜索了很多,我只发现lldb使用libcxx.py脚本使调试开发人员友好:

def update(self):
    logger = lldb.formatters.Logger.Logger()
    try:
        self.start = self.valobj.GetChildMemberWithName('__begin_')
        self.finish = self.valobj.GetChildMemberWithName('__end_')
        # the purpose of this field is unclear, but it is the only field whose type is clearly T* for a vector<T>
        # if this ends up not being correct, we can use the APIs to get at
        # template arguments
        data_type_finder = self.valobj.GetChildMemberWithName(
            '__end_cap_').GetChildMemberWithName('__first_')
        self.data_type = data_type_finder.GetType().GetPointeeType()
        self.data_size = self.data_type.GetByteSize()
    except:
        pass
def更新(自):
logger=lldb.formatters.logger.logger()
尝试:
self.start=self.valobj.GetChildMemberWithName(“”“开始”)
self.finish=self.valobj.GetChildMemberWithName(''结束')
#该字段的用途尚不清楚,但它是唯一一个类型明确为向量T*的字段
#如果结果不正确,我们可以使用API获取
#模板参数
数据类型查找器=self.valobj.GetChildMemberWithName(
“\uuuu end\u cap”.GetChildMemberWithName(“\uuu first”)
self.data\u type=data\u type\u finder.GetType().GetPointeeType()
self.data\u size=self.data\u type.GetByteSize()
除:
通过
这看起来过时了,对我来说就像是为所有容器润色脚本中的所有内容所做的大量工作。我无法相信2018年会有这么多痛苦:(

此python脚本的标题还表示:

随当前版本的OS X一起提供-它们不适用于其他实现 对于标准C++库——它们将被绑定到使用 特定于libc++的命名空间

也许有一个版本的macOS附带了兼容的libc++和格式化程序


现在我在MaOS103.4,XCODE9.4.1,我需要C++ 17支持。

< P>一个STL数据格式从一个Python移到一个内置C++的。一个当前的向量格式在这里,如果你感兴趣的是:

Python版本作为您可以在数据格式化程序中执行的操作的示例

我没有容易获得的9.4版本,但我尝试了10.0 beta版本,当使用-std=c++17编译时,lldb正确地打印std::vectors。如果这不是您的经验,请使用失败的示例或使用失败的示例提交错误