让 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 变量检查器显示自定义摘要和/或合成子项的主要内容,如果未能解决你的问题,请参考以下文章

带有身份检查器的自定义 Xcode 选择器

标签栏项目图像不显示 - xcode 6 [关闭]

通过属性检查器使用 xcode 自定义字体

Xcode 6 或 7 面板“尺寸检查器”的约束框背景中显示的“Ag”是啥?

如何在 Xcode 5 中自定义默认键盘

如何让自定义标签栏显示标签栏项目在 Xcode 中设置的选定图像?