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

时间:2018-08-04 19:47:47

标签: xcode macos lldb libc++

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

我在Google上搜索了很多东西,我才发现使用libcxx.py脚本来调试开发人员友好的lldb:

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

这看起来已经过时了,在我看来,要为所有容器完善此脚本中的所有内容,需要进行大量工作。我不敢相信2018年会有这么多痛苦:(

此python脚本的标头还显示:

  当前版本的OS X中的

船-它们不适用于其他实现   标准C ++库的-并且它们必然会使用   libc ++特定的命名空间

也许存在兼容的libc ++和格式化程序附带的macOS版本?

现在我在macOS 10.13.4,Xcode 9.4.1上,并且我需要c ++ 17支持。

1 个答案:

答案 0 :(得分:1)

将stl数据格式化程序从基于python的代码移到了内置的C ++。如果您感兴趣的话,当前矢量是一个在这里

http://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp

仅以Python版本为例,说明您可以在数据格式化程序中执行的操作。

我没有9.4,但是我用-std = c ++ 17编译时尝试了10.0 beta和lldb正确打印std :: vectors。如果那不是您的经验,请向http://bugreporter.apple.comhttp://bugs.llvm.org提交一个错误示例,以供您参考。