Xcode 调试器 (lldb) 从内存地址获取对象描述

Xcode debugger (lldb) get object description from memory address

鲜为人知的事实:现在可以在 Xcode 中暂停在调试器中,内省通知中心以了解注册了哪些对象以接收哪些通知:

(lldb) po NotificationCenter.default

<NSNotificationCenter:0x6040000d40b0>
Name, Object, Observer, Options
com.apple.accessibility.reduce.motion.status, 0x10b126190, 0x7fc795700140, 1001
com.apple.accessibility.asst.scanner.status, 0x10b126190, 0x7fc795700140, 1001
// ... etc. ...

很好,但是如何从获取内存地址 0x7fc795700140 到了解 的对象?

编辑 我把这个问题留在这里,但我认为正确的答案是

中显示的那种东西

po 适用于地址(至少在 Objective-C/Mac 上下文中)

e.g.:

(lldb) po [NSNotificationCenter defaultCenter]

NSWindowDidResizeNotification, 0x7fff9a0e98e0, 0x6100001246a0, 1400

(lldb) po 0x6100001246a0

ExpandOneView: 0x6100001246a0

Phillip 的答案等价于 Swift 是:

(lldb) expr -l objc -O -- 0x7fc795700140
<UIApplication: 0x7fc795700140>

首先,我使用的LLDB命令。

(lldb) expr -l objc -O -- 0x600001582d00

<__NSArrayI 0x600001582d00>(
<UIStoryboardShowSegueTemplate: 0x600002c3e4c0>,
<UIStoryboardPresentationSegueTemplate: 0x600001582210>,
<UIStoryboardPresentationSegueTemplate: 0x600001582620>,
<UIStoryboardShowSegueTemplate: 0x600002c3f4c0>,
<UIStoryboardPresentationSegueTemplate: 0x6000015839d0>,
<UIStoryboardShowSegueTemplate: 0x600002c3d680>,
<UIStoryboardEmbedSegueTemplate: 0x600002c3dc40>
)

对于 Swift class 的实例。

expr -l swift -O -- 

对于 Objective-C class 的实例。

expr -l objc -O --

对于 C 的实例 class。

expr -l c -O --

现在,一个解释。我很高兴在我们的 jr. 中修复了 1400 多个内存泄漏。 iOS 开发者代码。通常,当我在内存图调试器中检查泄漏的对象时,我所拥有的只是对象在内存中的地址。这是在 Objective-C 和 Swift 应用程序中,因此我们必须能够检查两种语言的对象。在 LLDB 中,我必须在被检查的内存地址指定变量的语言。这在 Swift 和 Objective-C 中有效。我上面提供的是 Swift、Objective-C 和 C.

的示例输出和命令示例