让 Xcode 5 变量检查器显示自定义摘要和/或合成子项
Posted
技术标签:
【中文标题】让 Xcode 5 变量检查器显示自定义摘要和/或合成子项【英文标题】:Getting Xcode 5 variable inspector to show custom summary and/or synthetic children 【发布时间】:2014-03-05 21:59:42 【问题描述】:我有一些来自库的 C++ 类具有不透明的数据类型。 Xcode 不理解它们,因此无法在变量检查器中显示它们。我已经为 lldb 编写了 Python 脚本,它可以正确分解这些不透明类型并返回合成子项。我有一个 Python 类 OpaqVector_syntheticChildren,它实现了 get_child_at_index()、num_children() 等。
例如,当程序在 Xcode 中的断点处暂停时,在 lldb 提示符处: (lldb) 帧变量 sarr (OpaqueVector) sarr = [0] = 1 [1] = 2 [2] = 3
但是,在变量检查器中,sarr 显示粉红色的“S”以表明它是一个结构,并且没有摘要或扩展箭头。我可以右键单击并选择“打印“sarr”的描述,然后在 lldb 控制台中获得正确的(与上面匹配的)输出。是否有一些额外的技巧可以让 Xcode 本身显示结构的合成子代?
【问题讨论】:
如果你执行 frame variable -d run -- sarr 会发生什么?除了一个非常奇怪的错误(我建议您在 bugreport.apple.com 上报告),我现在唯一能想到的就是动态类型开始出现并混淆 UI 中的类型匹配算法。跨度> 您的命令运行正常,但我刚刚发现了实际问题,它在我的 Python 代码中。我的班级的 has_children() 方法在应该返回 True 时没有返回 - 将其归咎于 Python 经验不足。 【参考方案1】:Xcode 调用您提供的类的 has_children() 方法来生成合成子项。如果该函数不返回 True,则不会调用 num_children() 或 get_child_at_index(),而 lldb 命令提示符似乎不会进行该检查。因此,如果您在该函数中有错误,您将得到我在问题中描述的行为。
【讨论】:
无论 num_children 和 has_children 返回什么,看起来 lldb 提示都会为索引 (0..255) 调用 get_child_at_index。您必须为所有索引返回 None >= self.num_children。目前正在等待 Xcode 完成打印 256*256*256 日志行 :-(以上是关于让 Xcode 5 变量检查器显示自定义摘要和/或合成子项的主要内容,如果未能解决你的问题,请参考以下文章