Xcode调试中的stl(libcxx)渲染器
测试用例很简单:只有std::vector和一些元素。在调试会话期间,我甚至看不到向量的大小,根据lldb,向量的大小是0 我在谷歌上搜索了很多,我只发现lldb使用libcxx.py脚本使调试开发人员友好: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_')
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。如果这不是您的经验,请使用失败的示例或使用失败的示例提交错误