【问题标题】:IPHONE: Analyzing leaks with instrumentsIPHONE:使用仪器分析泄漏
【发布时间】:2009-10-27 22:39:20
【问题描述】:

我正在尝试使用仪器定位泄漏点,但我看到的泄漏点与下图中的泄漏点类似:

leaks

如您所见,没有关于哪一行代码正在泄漏的信息。我的所有泄漏,大约 20 个,都是这样的,或者换句话说,泄漏没有特别显示我的任何代码行。

这张图片中的泄漏与 CoreFoundation 上的“_CFAllocatorSystem”(???) 有关,我还有其他人只是简单地说 GSEvent。我不知道是什么产生了这些。

我怎样才能发现这一点?

感谢您的帮助。

【问题讨论】:

    标签: iphone iphone-sdk-3.0


    【解决方案1】:

    我认为您想在泄漏运行后进入仪器并选择“源视图”。然后您需要将源文件拖到仪器窗口中。然后它将显示代码中发生泄漏的行以及调用堆栈。

    我的一些折腾代码泄漏了视图。在 Instruments 中看起来像这样: alt text http://img688.imageshack.us/img688/9669/screenshot20091028at131.png

    【讨论】:

      【解决方案2】:

      Leaks 向您展示的是,对分配泄漏对象的代码的跟踪(这意味着它被保留,但您的应用程序没有留下具有该地址的变量)。它没有向您显示的只是对象应该被释放到不会导致泄漏的位置,因为这是不可能知道的(可以找到当前调用释放的位置,但这可能没有太大帮助)。

      所以这条跟踪告诉我的是,系统分配的一些内存被你保留了,然后忘记了引用 - 一个关键是“PurpleEvent”行,这在处理线程的线程中很常见计时器事件或通知。可能是您收到了通知并保留了一些信息,但后来没有发布。

      如果您知道泄漏发生的时间点,您应该能够隔离在那段时间运行的代码。

      【讨论】:

        【解决方案3】:

        请参阅here,尤其是这句话:

        此列表会告知您泄漏对象的类型、大小、地址,甚至它们的调用堆栈。

        然后就可以通过调用栈追踪泄露内存的来源了。

        堆栈跟踪准确地显示了哪一行是罪魁祸首。在您的情况下,显然 main.m 中的第 14 行。不知道你在困惑什么?

        【讨论】:

        • 抱歉,您的回答没有显示任何解决问题的方法。你有没有点击我发布的图片?我的图像与你的图像几乎不相上下,知道对象类型、大小、地址和调用堆栈无助于了解是什么产生了这个。
        • 如果您查看几乎所有使用模板创建的 iPhone 项目,main.m:14 只是清空自动释放池的那一行——它实际上与泄漏源无关,这只是前进的一步。
        • 和 main.m:14 指向整个应用程序,类似于“此应用程序上有一个链接”,但我知道。
        【解决方案4】:

        有罪的是加速度计,我正在为 OS 3.0 进行编译。

        换句话说,Apple 声称其泄漏已修复的加速度计仍然在泄漏。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-15
          • 1970-01-01
          • 2011-11-02
          • 2012-04-06
          • 1970-01-01
          • 1970-01-01
          • 2012-06-11
          • 2011-10-12
          相关资源
          最近更新 更多