为什么 lldb 的 po 命令不能打印 superview in dot?

why does lldb's po command can't print superview in dot?

如果我想要 po subView 的 superview,当我使用 subView.superView 时,它会抱怨找不到,但是如果我使用 [subView superView],po 命令就可以正常工作,这背后的原因是什么?

(lldb) po self.blackView.superview
error: property 'superview' not found on object of type 'UIView *'
error: 1 errors parsing expression
(lldb) po ((UIView*)self.blackView).superview
error: property 'superview' not found on object of type 'UIView *'
error: 1 errors parsing expression
(lldb) po [self.blackView superview]
<UIView: 0x15d53ce50; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x15d53cfc0>>

它们通常不是真正的解析问题,它们往往是 "quality of type information" 问题。在这种情况下,superview 实际上是 UIViewHierarchy 类别上的 属性,并且 clang 的调试信息中存在错误,导致它不会为类别中的属性生成调试信息。编译器不会将 属性 访问转换为方法调用,除非它知道类型。

如果您正在使用 Xcode7,您通常可以通过指示 lldb 构建模块来解决使用 clang "modules" 功能的框架(包括大多数 Apple 框架)的类型信息问题对于感兴趣的框架,它具有更丰富的类型信息。您可以通过发出 lldb 命令来执行此操作:

(lldb) expr @import UIKit

先尝试 运行,然后再尝试您的表达式,看看效果是否更好。