Xcode:通过LLDB脚本或其他方式显示Apple框架类的属性

时间:2014-03-13 16:09:18

标签: python xcode debugging sprite-kit lldb

通过各种资源,我发现您可以在LLDB中创建自定义描述甚至自定义对象摘要。我也知道我可以做"添加表情"为了显示调试器隐藏的Apple框架类的属性值。

我想要的是显示框架类对象,就像源代码可用一样。

图片说的不仅仅是文字...到目前为止我所拥有的:


enter image description here


正如您所看到的,我在范围内有一个名为SKLabelNode的{​​{1}}。我设法在教程herehere之后通过Python脚本添加了_label旁边的自定义摘要字符串("这些是单词")。

我还可以看到SKNode_label.fontName,但这只是因为我右键点击并执行了#34;添加表达式"手动为每个属性。

我的问题:

  1. 是否可以(如果是这样的话)通过Python LLDB脚本将对象的属性添加到其树视图中?我想要的是_label.text对象展开,然后始终显示其_labelfontName and other properties,就像我通过手动添加表达式一样。或换句话说:它应该表现得好像完整的源代码可用于该类。

  2. 或者:有没有办法运行"添加表达式"从脚本,以便我可以创建一个快速添加多个表达式的别名?也许我可以添加有问题的对象作为参考,例如text

  3. 我也接受替代解决方案。例如,如果我可以为每个SK * Node类编写代理类并以某种方式使LLDB显示节点的相应代理类的内容,那么这也将起作用。无论做什么工作,最好是以自动化(一旦实施)的方式。


    一般来说,让LLDB调试器从Apple框架中显示类的(记录的!)属性有多难?

    特别是对于Sprite Kit,我们没有得到任何关于任何SK * Node对象的信息,我无法相信这并没有让其他使用其他Apple框架的开发人员感到困扰,因为它让我感到困难。我希望有一种方法可以修复"这个,但我能找到的小信息让我觉得它不可能,或者我想要查看有关Apple类对象的更多细节我是疯了。

    PS:是的,我还调查并定制了Xcode 5.1的 QuickLook 功能。我为一些Sprite Kit类创建了一个SpriteKit+QuickLook repository with QuickLook/debugDescriptions,但它仍然不能令人满意,因为它只用作完整的类转储(尽管比没有好)。

1 个答案:

答案 0 :(得分:1)

如果您可以运行一个返回这些属性值的表达式,则可以向SKLabelNode添加一个合成子提供程序,其结果是将每个属性作为LabelNode本身的子项进行评估

有关所有这些的更多详情,请访问LLDB官方网站:http://lldb.llvm.org/varformats.html

但请注意:现在无论何时在Xcode中停止,无论程序状态有多么糟糕,LLDB都会尝试运行这些表达式。这不会在理想的世界中降低调试器的作用,但如果这些属性不只是读取某些字段,它肯定会导致你的下级产生奇怪的副作用

还要警告说,表演不会令人兴奋。在涉及SKLabelNode的每个停靠点或步骤中,LLDB将运行代码来计算这些属性的值(假设您的SKLabelNode已扩展,并且子项可见,即)

tl; dr 这就是为什么默认情况下调试器不显示这些属性的原因 - 如果您真的关心,请创建一个运行适当表达式的合成子提供程序