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

标签 python xcode debugging sprite-kit lldb

通过各种资源,我发现您可以在 LLDB 中创建自定义描述甚至自定义对象摘要。我还知道我可以执行“添加表达式”以显示调试器对我们隐藏的 Apple 框架类的属性值。

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

一张图片胜于千言万语......我目前所拥有的:


enter image description here


如您所见,我在范围内有一个名为 _labelSKLabelNode。我按照教程 here 设法通过 Python 脚本在 SKNode 旁边添加了自定义摘要字符串(“这些是单词”)和 here .

我还可以看到 _label.fontName_label.text 但这只是因为我右键单击并为每个属性手动执行了“添加表达式”。

我的问题:

  1. 是否可以(如果可以的话如何)通过 Python LLDB 脚本将对象的属性添加到其 TreeView 中?我想要的是要扩展的 _label 对象,然后始终显示其 fontNametext and other properties就像我通过手动添加表达式所做的那样。或者换句话说:它应该表现得好像该类有完整的源代码。

  2. 或者:有没有一种方法可以从脚本运行“添加表达式”,以便我可以创建一个可以快速添加多个表达式的别名?也许我可以添加相关对象作为引用,例如 command addCustomExpressionsWithObject _label

我也接受替代解决方案。例如,如果我可以为每个 SK*Node 类编写代理类,并以某种方式让 LLDB 显示节点对应代理类的内容,那也可以。无论以何种方式完成工作,最好是以自动化的方式(一旦实现)。


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

特别是对于 Sprite Kit,我们得不到关于任何 SK*Node 对象的任何信息,我不敢相信这并没有像我一样困扰使用其他 Apple 框架的其他开发人员。我希望有一种方法可以“修复”这个问题,但我能找到的少量信息让我觉得这要么不可能,要么我疯了想要查看有关 Apple 类对象的更多详细信息。

PS:是的,我还研究并定制了 Xcode 5.1 的 QuickLook 功能。我创建了一个 SpriteKit+QuickLook repository with QuickLook/debugDescriptions对于某些 Sprite Kit 类,它仍然不能令人满意,因为它仅用作完整的类转储(不过总比没有好)。

最佳答案

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

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

然而,请注意:现在无论何时您在 Xcode 中停止,无论您的程序状态多么损坏,LLDB 都会尝试运行这些表达式。在理想情况下,这不会导致调试器崩溃,但如果这些属性不只是读取某些字段,它肯定会在你的下层造成奇怪的副作用

另请注意,性能不会令人兴奋。在涉及 SKLabelNode 的每一站或每一步,LLDB 将运行代码来计算这些属性的值(假设您的 SKLabelNode 已展开,并且子节点可见,即)

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

关于python - Xcode:通过 LLDB 脚本或其他方式显示 Apple 框架类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22384425/

相关文章:

python - 使用 wxPython 和 py2app 发布适用于多个 OS X 版本的 Mac 应用程序

python - 我正在使用 python3,其中有字典列表

Android Studio 的调试器不会在库模块中的断点处停止

python - 在 pdb 中打印值

python - 如何使用 PYTHON 获取详细的 Big Query 错误

python - 未绑定(bind)本地错误: local variable 'transaction_id' referenced before assignment

c - 使用 Xcode 在 Mac 上的 C 中 fputs 崩溃

objective-c - 在 Xcode 中观察变量

xcode - CoreAnimation 未提交 CATranaction NSComboBox

java - 调试执行冒险