使用给定的十六进制指针打印变量的正确方法是什么 (Xcode 10.3, 11 beta)

What's a proper way to print variable with a hex pointer given (Xcode 10.3, 11 betas)

鉴于臭名昭著 < NSLayoutConstraint:0x1c809d970 UIView:0x11fe288b0.height == 16 (active)> & co 来自自动布局引擎

通过十六进制指针值打印 UIView class 对象的勇敢新的快速世界方法是什么?

(lldb) p *((UIView*)0x11fe288b0)

错误: :3:12: 错误:应为“,”分隔符 *((UIView*)0x11fe288b0) ^ ,

(lldb) po *((UIView*)0x11fe288b0)

错误: :3:12: 错误:应为“,”分隔符 *((UIView*)0x11fe288b0) ^ ,

(lldb) expr *((UIView*)0x11fe288b0)

错误: :3:12: 错误:应为“,”分隔符 *((UIView*)0x11fe288b0) ^ ,

这是 xcode 10.3 和 11 beta 3

更新:

(lldb) p *((UIView*)0x11fe288b0)

最初在 xcode 11 beta 5 中工作,现在它停止工作了: 这可能已在 beta 5 中修复,但可能 当我回到“已安装”的 xcode 10.3 时,该修复程序遭到破坏 附加组件

UPD2:这似乎是

的副本

如果问题只是布局约束,最简单的解决方案是为您的约束提供一个字符串标识符。您可以在代码或情节提要中执行此操作。使调试约束变得非常容易;标识符首先出现在调试输出中的引号中:

[LayoutConstraints] Unable to simultaneously satisfy constraints.
(
    "<NSLayoutConstraint:0x600003af86e0 'getStartedBad' ... >",
    "<NSLayoutConstraint:0x600003af8730 'getStartedTop' ... >"
)

如果问题是关于您只有地址的 UIView,您可以像这样向它发送消息:

(lldb) expr -l objc -O -- [(UIView*)0x11fe288b0 layer]

(是的,你必须与它交谈 Objective-C,但我认为没有其他方法。)

您可以在 Swift 中使用 unsafeBitCast 从地址投射到 UIView(或任何其他 class 的 mutatis mutandis),例如:

(lldb) po unsafeBitCast(<ADDRESS>, to: UIView.self)

您也可以通过这种方式访问​​属性:

(lldb) po unsafeBitCast(<ADDRESS>, to: UIView.self).bounds

等...