2008-09-27 220 views
61

Apple的Xcode开发环境是否提供任何内存泄漏检测工具?内存泄漏检测工具

我对适用于iPhone SDK的工具特别感兴趣。目前我最喜欢的业余爱好编程平台

上述工具的文档/教程将非常有帮助。

回答

63

运行在Xcode工具有一个专门打电话Leaks和像以前的海报说,运行它的最简单的方法是直接从Xcode的:

运行 - >启动与性能工具 - >泄漏

它在检测内存泄漏方面看起来非常好,对于像我这样的Non-C Head来说,很容易找出。

4

ObjectAlloc和MallocDebug应该对你有帮助。如果您安装了整个SDK,可以在Developer-> Applications-> Performance Tools中找到它们。

他们的名字给你一个很好的线索,就其功能而言,OA跟踪对象的创建,MA是一个通用的内存泄漏工具。

我还没有尝试过iPhone开发,但我必须相信他们也会在那里工作。从在Xcode 6 Product菜单启动苹果的仪器工具Instruments User Guide

+0

如何安装整个SDK? – 2012-06-06 04:29:56

25

选择Profile

假设你已经注册了ADC iPhone开发者网站,这里的链接可循。 (该应用程序位于Xcode应用程序的包内容中:/Applications/Xcode.app/Contents/Applications/

商业替代方案是 OmniObjectMeter(由奥姆尼集团已停产)

+2

OmniObjectMeter现在可以免费下载。 – Tony 2011-03-25 10:50:18

+2

是否有关于如何使用Apple的乐器的教程? – 2011-06-19 08:56:28

+1

@nute:看看苹果网站上的WWDC视频。 – titaniumdecoy 2012-02-24 17:14:01

6

您可以通过menu -> run -> start with performance tool -> ...

3

enter image description here

步骤1.挑选分配仪器

  1. 选择用于分配的性能测试模板:

enter image description here

  • 在主仪器界面,单击虚拟机跟踪器(如果存在),然后按Delete键,因为您不需要该特定仪器:
  • enter image description here

    通过点击右上角的加号按钮,你可以添加更多的仪器不同类型的测试,但我不会在本教程中覆盖它们。

    第2步:设置您的仪器设置

    运行任何分析之前,有你需要做的几件事情。首先,您需要插入安装了应用程序的iOS设备。它必须是物理设备,因为iOS模拟器仍然是模拟器,可能无法准确地表示应用程序中的内存使用情况,或者应用程序在内存压力下的表现。

    来挑选你的目标,单击顶部附近我的电脑,将鼠标悬停在您的设备,然后选择您的应用程序从子菜单:

    enter image description here

    其次,有一个面板,您可以更改您将查看的分配类型的设置。除了确保创建&持续泡沫被检查,你没有太多需要事先做。

    enter image description here

    步骤3.按记录运行仪器

    一旦按下左上角录制按钮,您的应用程序将启动您的设备上,并且仪器将开始图表你的分配。您需要在此处执行的操作是通过您的应用程序执行的,重点讨论可能的问题区域,以查看是否有更多的内存分配而不是释放。这可能意味着做了很多重复的任务,但是稍后你会感谢你自己。

    您应该看到这样的事情:

    enter image description here

    我建议通过您的应用程序运行一次,以获得一个稳定的点在内存中,以便你有一个很好的基础,这将使任何增加明显。当您满意时,您有足够的数据进行测试,请按左上方的停止按钮。

    步骤4.分析

    1. 我做的第一件事情就是把我的检查范围来衡量我的基线总持续字节。该持久字节号位于分配摘要的正下方。

    enter image description here

    实际设置的检查范围,使用键盘快捷键命令<左检查范围和命令>为正确的检查范围。在我们的应用程序中,我们的基线大约为20MB。

    enter image description here

  • 然后,我将我的右检查范围内,我已经通过应用程序再次运行,回来给我们的根点。在这里,你可以看到内存大致相同。所以,通过再做几次这样的事情,看到你的记忆回到我们的基线,你可以假设没有重大的记忆问题。
  • enter image description here

    有分析这个数据,我将不包括在这里,但要注意,有方式来查看和分析数据的整体下拉菜单中选择不同的方式。

    enter image description here

    第5步标志代

    如果你不喜欢对付检查的范围为多,有一个叫马克生成功能。仪器的右侧面板上有一个按钮。

    enter image description here

    该按钮将根据在检查线上是标记仪器的时间轴上的点。它是这样做的,以便跟踪自上一个商标以来的所有分配,或者如果没有其他商标则从头开始。当你运行的是分配工具可以标记代或已经停止运行后,如本例:

    enter image description here

    步骤6.检查出来的堆栈跟踪

    的最后一件事以覆盖正在看堆栈跟踪。对于这一点,你要设置你的检查范围,以突出显示所有的分配,然后看看统计数据视图,确保创建&持续泡在右侧面板中选择。在统计视图中,确保持久字节从最高到最低排序。这里有很多分配的,它可以是很难理解到底是怎么回事,因为他们中的很多都是系统分配。

    enter image description here

    去深

    1. 看最大的分配,然后点击右向箭头。很多时候在你点击的内容中会有分配,其中很多对你没有意义。

    enter image description here

  • 在突出显示点击的箭头后不同分配,继续寻找正确的面板上的扩展的细节。最终你会遇到一些粗体的文本,这会导致项目中的实际代码,告诉你这个问题可能是什么。
  • enter image description here

  • 如果双击堆栈跟踪大胆的项目之一,它会带你到实际的代码(假设你跑的分配你拥有的应用程序)。
  • enter image description here

  • 有一个关于这个观点,一个是右侧的大多是黄色的标签,以显示你很多有用的东西到底有多少内存每个方法调用正在接受。每个应用程序是不同的,所以你的开发者,有权决定是否加亮的方法是一个问题,有些东西你可以优化,或者您的应用程序只是一个不可避免的一部分。

  • 在我的情况下,变量的UIColor的东西,是持久的,在我们的应用中使用,因此,在我们的应用程序的生命可以接受的。

  • found here