繁体   English   中英

Xcode调试/仪器:查看对象的所有指针

[英]Xcode debugging / Instruments: See all pointers to an object

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

预ARC我可以通过覆盖retain解决这个问题

- (id) retain
{
    // Break here to see who is retaining me.
    return [super retain];
}

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

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

运行您的应用程序,然后查看屏幕底部的导航器。 您应该看到一组三个连接的圆圈:

在此输入图像描述

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

在此输入图像描述

这节省了我几天的工作。 这是一个非常有用的工具。 我希望它也可以帮助别人。

仪器快照分析工具是我能找到的最好的东西。 本文提供了更完整的教程 ,但基本步骤如下:

  1. 选择产品 - > 配置文件 选择分配工具。
  2. 在左侧,在重大事件之前/之后按Mark Heap按钮。 在我的情况下,这是在登录之前,登录之后和注销之后。
  3. 在Heapshot中搜索您正在寻找的课程。
  4. 按下显示三角形以查看其内存地址。
  5. 按内存地址右侧的箭头可查看其负责的调用方(它显示在最右侧的列中。)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM