代码之家  ›  专栏  ›  技术社区  ›  matt

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

  •  10
  • matt  · 技术社区  · 7 年前

    鲜为人知的事实:现在,在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

    编辑 LLDB (Swift): Casting Raw Address into Usable Type

    3 回复  |  直到 3 年前
        1
  •  20
  •   matt    4 年前

    (lldb) expr -l objc -O -- 0x7fc795700140
    <UIApplication: 0x7fc795700140>
    
        2
  •  9
  •   Phillip Mills    7 年前

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

    NSWindowDidResizeNotification,0x7fff9a0e98e0,0x610001246A0,1400

    ExpandOneView:0x610001246A0

        3
  •  6
  •   Alex Zavatone    4 年前

    首先,我使用的LLDB命令。

    (lldb) expr -l objc -O -- 0x600001582d00
    
    <__NSArrayI 0x600001582d00>(
    <UIStoryboardShowSegueTemplate: 0x600002c3e4c0>,
    <UIStoryboardPresentationSegueTemplate: 0x600001582210>,
    <UIStoryboardPresentationSegueTemplate: 0x600001582620>,
    <UIStoryboardShowSegueTemplate: 0x600002c3f4c0>,
    <UIStoryboardPresentationSegueTemplate: 0x6000015839d0>,
    <UIStoryboardShowSegueTemplate: 0x600002c3d680>,
    <UIStoryboardEmbedSegueTemplate: 0x600002c3dc40>
    )
    

    expr -l swift -O -- 
    

    对于Objective-C类的实例。

    expr -l objc -O --
    

    对于C类的实例。

    expr -l c -O --