让Xcode 5变量检查器显示自定义摘要和/或合成子项

让Xcode 5变量检查器显示自定义摘要和/或合成子项,xcode,lldb,Xcode,Lldb,从一个库中有一些C++类,这些库有不透明的数据类型。Xcode不理解它们,因此无法在变量检查器中显示它们。我已经为lldb编写了Python脚本,它可以正确分解这些不透明类型并返回合成子级。我有一个Python类OpaqVector_children,它实现了get_child_at_index()、num_children()等等 例如,当程序在Xcode中的断点处暂停时,在lldb提示符处: (lldb)帧变量sarr (不透明向量)sarr={ [0] = 1 [1] = 2 [2] =

从一个库中有一些C++类,这些库有不透明的数据类型。Xcode不理解它们,因此无法在变量检查器中显示它们。我已经为lldb编写了Python脚本,它可以正确分解这些不透明类型并返回合成子级。我有一个Python类OpaqVector_children,它实现了get_child_at_index()、num_children()等等

例如,当程序在Xcode中的断点处暂停时,在lldb提示符处: (lldb)帧变量sarr (不透明向量)sarr={ [0] = 1 [1] = 2 [2] = 3 }


但是,在变量检查器中,sarr显示粉红色的“S”,以显示它是一个结构,没有摘要或扩展箭头。我可以右键单击并选择“打印“sarr”的说明”,然后在lldb控制台中获得正确的(上面匹配的)输出。要让Xcode本身显示结构的合成子级,还有什么额外的技巧吗?

Xcode调用您提供的类的has_children()方法来生成合成子级。如果该函数不返回True,它将不会调用num_children()或get_child_at_index(),而lldb命令提示符似乎不会执行该检查。因此,如果您在该函数中有一个bug,您将得到我在问题中描述的行为。

如果您执行frame variable-d run--sarr,会发生什么?除了一个非常奇怪的bug,我鼓励你在bugreport.apple.com上报告这个bug,我现在唯一能想到的是动态类型的出现,并混淆了UI中的类型匹配算法。你的命令工作正常,但我刚刚发现了实际的问题,它出现在我的Python代码中。我的类“has_children()方法在应该返回True时没有返回True-这是因为对Python缺乏经验。看起来lldb提示符将在索引(0..255)处调用get_children_,而不管返回多少num_children和has_children。对于所有索引>=self.num\u子级,必须返回None。当前正在等待Xcode完成打印256*256*256日志行:-(