Ios Xcode调试/工具:查看指向对象的所有指针

Ios Xcode调试/工具:查看指向对象的所有指针,ios,objective-c,xcode,instruments,Ios,Objective C,Xcode,Instruments,我刚开始做一个比较复杂的项目,发现了一个bug。当用户注销时,视图控制器仍分配在登录视图控制器的后面。它们继续响应旋转事件等。我在注销时将控制器设置为nil,但它仍在响应,这表明其他对象仍有指向它的指针。(此项目已启用弧。) 弧前I可能: 如何使用Xcode调试工具选择一个对象并列出指向它的所有其他对象?有没有比简单地搜索所有代码更好的方法?仪器堆分析工具是我能找到的最好的工具,但基本步骤是: 选择产品->配置文件。选择分配工具 在左侧,在重大事件之前/之后按标记堆按钮。在我的例子中,这是在登录

我刚开始做一个比较复杂的项目,发现了一个bug。当用户注销时,视图控制器仍分配在登录视图控制器的后面。它们继续响应旋转事件等。我在注销时将控制器设置为
nil
,但它仍在响应,这表明其他对象仍有指向它的指针。(此项目已启用弧。)

弧前I可能:


如何使用Xcode调试工具选择一个对象并列出指向它的所有其他对象?有没有比简单地搜索所有代码更好的方法?

仪器堆分析工具是我能找到的最好的工具,但基本步骤是:

  • 选择产品->配置文件。选择分配工具
  • 在左侧,在重大事件之前/之后按标记堆按钮。在我的例子中,这是在登录之前、登录之后和注销之后
  • 在Heapshot中搜索您要查找的类
  • 按三角形以查看其内存地址
  • 按内存地址右侧的箭头以查看其负责调用者(它显示在最右边的列中)

  • 如果其他人写了更详细的解释,或者可以提供任何相关的lldb命令,我很乐意将您的答案标记为正确。

    从Xcode 8开始,您可以使用调试内存图:

    运行应用程序并查看屏幕底部的导航器。您应该看到一组三个相连的圆:

    导航到任何位置,以便在内存中分配对象,然后点击此图标。它会暂停你的应用程序,并在你的Xcode屏幕上弹出一个图表。现在,在屏幕的左侧可以看到对象列表。找到要查看所有指针的对象并单击它。现在,它们应该在图表中可见。通过点击分支左端节点上的两个箭头,可以展开这些分支。该图应如下所示:


    这确实节省了我几天的工作。这是一个非常有用的工具。我希望它也能帮助其他人。

    也许你可以在
    objc_retain
    上添加一个符号断点,但你需要找到一个条件,使它只在你想要的对象上停止,而不是在保留的每个对象上停止……有一个更好的方法使用Xcode 8。看看我的答案。谢谢!
    - (id) retain
    {
        // Break here to see who is retaining me.
        return [super retain];
    }