使用 Xcode 进行调试时,是否可以在代码中将鼠标光标放在 属性 上时查看值?

When debugging with Xcode, is there way to see a value of property when mouse cursor on it in code?

我不明白为什么,即使在 Xcode 6 上,我也需要单击 self,搜索 属性,然后才能看到该值。 如果对象有 100 个属性,那就很烦人了。

我正在寻找简单的解决方案,当我将鼠标光标放在 self.someproperty 上时, 在“someproperty”上面我会看到它的值,无论如何,NSStringNSArray,等等

谢谢。

您可以在控制台中使用 lldb 的日志记录功能,这是一个巨大的帮助:

调试区的右侧,您有控制台(这也是所有NSLog输出的地方).

控制台中,您可以使用命令po打印对象)和print来打印变量的值。

这大概是因为您悬停在上方的 "properties" 并不是真正的变量。它们是访问器方法的语法糖(通常引用支持实例变量,但不一定如此)。这些访问器方法 getter 和 setter 要么是为您合成的,要么您可能已经手动实现了自己的自定义方法。有关已声明属性的详细信息,请参阅 Programming with Objective-C 文档中的 Declared Properties discussion in Apple's Core Competencies document or Properties Encapsulate an Object's Value

考虑下面的 foo 属性。您不能将鼠标悬停在对 self.foo 的引用上并查看您所期望的内容。但是,如果您将鼠标悬停在支持 属性 的实例变量 (ivar) 上,您可能会:

(顺便说一句,注意上面对self.foo = ...的引用并没有引用foogetter方法,而是实际调用了setter方法setFoo。因此,让 IDE 调试器通过将鼠标悬停在 "property" 上并暂停执行来识别,这似乎是一个 non-trivial 练习,但意识到您想调用 getter 来查看值而不是调用代码行实际引用的 setter。)

无论如何,回到IDE,你也可以拧开self,你也会在那里看到它:

这些技术并不完美(有时调试器会感到困惑),但希望这能说明基本的 UI。

我了解到您希望它在您将鼠标悬停在 属性 名称上时调用访问器方法。这是否意味着您还希望它调用鼠标恰好悬停在其上的任何随机方法?在纯函数式语言中,这个概念似乎更合理一些,但在过程语言中它似乎很危险,在这种语言中,任何方法都可能改变状态变量并产生一些意想不到的后果。我本以为,如果你考虑这样的功能,它应该需要一些比仅仅悬停在它上面更肯定的行动。

无论如何,如果您真的想要此功能,请在 http://bugreport.apple.com 提交 "feature request"。