通过各种资源,我发现您可以在LLDB中创建自定义描述甚至自定义对象摘要。我也知道我可以做"添加表情"为了显示调试器隐藏的Apple框架类的属性值。
我想要的是显示框架类对象,就像源代码可用一样。
图片说的不仅仅是文字...到目前为止我所拥有的:
正如您所看到的,我在范围内有一个名为SKLabelNode
的{{1}}。我设法在教程here和here之后通过Python脚本添加了_label
旁边的自定义摘要字符串("这些是单词")。
我还可以看到SKNode
和_label.fontName
,但这只是因为我右键点击并执行了#34;添加表达式"手动为每个属性。
我的问题:
是否可以(如果是这样的话)通过Python LLDB脚本将对象的属性添加到其树视图中?我想要的是_label.text
对象展开,然后始终显示其_label
,fontName
and other properties,就像我通过手动添加表达式一样。或换句话说:它应该表现得好像完整的源代码可用于该类。
或者:有没有办法运行"添加表达式"从脚本,以便我可以创建一个快速添加多个表达式的别名?也许我可以添加有问题的对象作为参考,例如text
。
我也接受替代解决方案。例如,如果我可以为每个SK * Node类编写代理类并以某种方式使LLDB显示节点的相应代理类的内容,那么这也将起作用。无论做什么工作,最好是以自动化(一旦实施)的方式。
一般来说,让LLDB调试器从Apple框架中显示类的(记录的!)属性有多难?
特别是对于Sprite Kit,我们没有得到任何关于任何SK * Node对象的信息,我无法相信这并没有让其他使用其他Apple框架的开发人员感到困扰,因为它让我感到困难。我希望有一种方法可以修复"这个,但我能找到的小信息让我觉得它不可能,或者我想要查看有关Apple类对象的更多细节我是疯了。
PS:是的,我还调查并定制了Xcode 5.1的 QuickLook 功能。我为一些Sprite Kit类创建了一个SpriteKit+QuickLook repository with QuickLook/debugDescriptions,但它仍然不能令人满意,因为它只用作完整的类转储(尽管比没有好)。
答案 0 :(得分:1)
如果您可以运行一个返回这些属性值的表达式,则可以向SKLabelNode添加一个合成子提供程序,其结果是将每个属性作为LabelNode本身的子项进行评估
有关所有这些的更多详情,请访问LLDB官方网站:http://lldb.llvm.org/varformats.html
但请注意:现在无论何时在Xcode中停止,无论程序状态有多么糟糕,LLDB都会尝试运行这些表达式。这不会在理想的世界中降低调试器的作用,但如果这些属性不只是读取某些字段,它肯定会导致你的下级产生奇怪的副作用
还要警告说,表演不会令人兴奋。在涉及SKLabelNode的每个停靠点或步骤中,LLDB将运行代码来计算这些属性的值(假设您的SKLabelNode已扩展,并且子项可见,即)
tl; dr 这就是为什么默认情况下调试器不显示这些属性的原因 - 如果您真的关心,请创建一个运行适当表达式的合成子提供程序