Xcode 调试中的 stl(libcxx) 渲染器
stl(libcxx) renderers in Xcode debug
测试用例很简单:只有 std::vector 和一些元素。在调试期间 session 我什至没有看到向量的大小,根据 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
这看起来已经过时了,而且对我来说,要为所有容器完善此脚本中的所有内容,需要做大量工作。我不敢相信 2018 年有这么多痛苦:(
这个 python 脚本的 header 还说:
ships with current releases of OS X - They will not work for other implementations
of the standard C++ library - and they are bound to use the
libc++-specific namespace
也许有一个 macOS 版本附带了兼容的 libc++ 和格式化程序?
现在我使用的是 macOS 10.13.4、Xcode 9.4.1,我需要 c++17 支持。
不久前,stl 数据格式化程序已从 python 移至内置 C++ 格式化程序。当前向量一就在这里,感兴趣的话:
http://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp
留下 Python 版本作为您可以在数据格式化程序中执行的操作的示例。
我没有容易获得的 9.4,但我尝试了 10.0 beta 和 lldb 在使用 -std=c++17 编译时正确打印 std::vectors。如果这不是您的经验,请使用 http://bugreporter.apple.com or http://bugs.llvm.org 提交一个错误,其中的示例对您来说是失败的。
测试用例很简单:只有 std::vector 和一些元素。在调试期间 session 我什至没有看到向量的大小,根据 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
这看起来已经过时了,而且对我来说,要为所有容器完善此脚本中的所有内容,需要做大量工作。我不敢相信 2018 年有这么多痛苦:(
这个 python 脚本的 header 还说:
ships with current releases of OS X - They will not work for other implementations of the standard C++ library - and they are bound to use the libc++-specific namespace
也许有一个 macOS 版本附带了兼容的 libc++ 和格式化程序?
现在我使用的是 macOS 10.13.4、Xcode 9.4.1,我需要 c++17 支持。
不久前,stl 数据格式化程序已从 python 移至内置 C++ 格式化程序。当前向量一就在这里,感兴趣的话:
http://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp
留下 Python 版本作为您可以在数据格式化程序中执行的操作的示例。
我没有容易获得的 9.4,但我尝试了 10.0 beta 和 lldb 在使用 -std=c++17 编译时正确打印 std::vectors。如果这不是您的经验,请使用 http://bugreporter.apple.com or http://bugs.llvm.org 提交一个错误,其中的示例对您来说是失败的。