内存泄漏检测工具

时间:2008-09-27 19:17:08

标签: iphone xcode memory-management memory-leaks

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

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

所述工具的文档/教程非常有用。

11 个答案:

答案 0 :(得分:64)

有一个专门称为Leaks,就像之前的一张海报所说的那样,最简单的运行方法是直接来自Xcode:

  
    

运行 - >从Performance Tool开始 - >泄漏

  

它似乎非常擅长检测内存泄漏,对于像我这样的非C头很容易理解。

答案 1 :(得分:25)

从Xcode 6的Profile菜单中选择Product以启动Apple的乐器工具。 (该应用程序位于Xcode应用程序的包内容中:/Applications/Xcode.app/Contents/Applications/

商业替代方案为OmniObjectMeter(由Omni集团终止)

答案 2 :(得分:12)

Clang Static Analyser非常适合在C,C ++和Objective-C代码中查找错误:

答案 3 :(得分:6)

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

上的Xcode中运行这些工具

答案 4 :(得分:6)

以下是使用xcode中的仪器检测ios / mac应用程序的内存泄漏/性能的链接 Steps to run instrument from Xcode

答案 5 :(得分:5)

  

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

     

我对适用于iPhone SDK的工具特别感兴趣。

是。 Apple称它们为“仪器”(不仅仅是内存工具)。

参见Apple的Introduction to Instruments User Guide。特别是,请参阅Locating Memory Issues in Your App。它提供了如何使用面向内存的跟踪模板的示例。

答案 6 :(得分:4)

ObjectAlloc和MallocDebug都应该对你有所帮助。如果您安装了整个SDK,则可以在Developer-> Applications-> Performance Tools。

中找到它们

他们的名字给你一个很好的线索,关于他们的功能,OA,跟踪对象创建和MA是一般的内存泄漏工具。

我还没有尝试使用iPhone开发,但我必须相信他们也可以在那里工作。

假设您已注册ADC iPhone开发者网站,请点击以下链接:Instruments User Guide

答案 7 :(得分:4)

使用rustyshelf's solution时,请确保在iPhone上测试,而不是在模拟器上测试。内存使用情况大不相同。

答案 8 :(得分:4)

总结一下主要的内存泄漏工具:iphone-essential-performance-tools-list

答案 9 :(得分:3)

尝试这个,一个从Xcode insturments开始的简单教程

内存泄漏工具:http://www.raywenderlich.com/2696/

基本:http://www.raywenderlich.com/23037/how-to-use-instruments-in-xcode

答案 10 :(得分:3)

enter image description here

步骤1.选择分配工具

  1. 选择分配的分析模板:
  2. enter image description here

    1. 在主要的仪器界面上,单击VM Tracker(如果存在),然后按Delete键,因为您不需要该特定仪器:
    2. enter image description here

      点击右上方的加号按钮,您可以为不同类型的测试添加更多乐器,但我不会在本教程中介绍它们。

      步骤2.设置乐器设置

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

      要选择目标,请点击顶部附近的我的电脑,将鼠标悬停在您的设备上,然后从子菜单中选择您的应用:

      enter image description here

      接下来,有一个面板,您可以在其中更改要查看的分配类型的设置。除了确保创建&检查持久性气泡,事先没有太多需要做的事。

      enter image description here

      步骤3.按记录运行仪器

      按下左上方的“录制”按钮后,您的应用将在您的设备上启动,乐器将开始绘制您的分配图表。你需要做的就是运行你的应用程序,专注于可能的问题区域,看看是否有更多的内存分配而不是解除分配。这可能意味着要做很多重复的任务,但是你以后会感谢自己。

      你应该看到这样的事情:

      enter image description here

      我建议您在应用程序中运行一次并获得内存中的稳定点,这样您就有了一个良好的基线,可以使任何增加明显。如果您对要测试的数据足够满意,请按左上角的停止按钮。

      步骤4.分析

      1. 我要做的第一件事就是设置检查范围来测量基线的总持续字节数。该持久字节数位于分配摘要的正下方。
      2. enter image description here

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

        enter image description here

        1. 然后,我将我的右侧检查范围移动到我再次浏览应用程序并回到我们的根目录的位置。在这里,你可以看到内存大致相同。因此,通过这样做几次并看到你的记忆回到我们的基线,你可以假设没有重大的内存问题。
        2. enter image description here

          我可以通过不同的方式分析这些数据,但是请注意,这里有一个完整的下拉菜单,可以查看和分析您的数据。

          enter image description here

          步骤5.标记世代

          如果您不想同时处理检查范围,则会有一项名为Mark Generation的功能。右侧仪器面板上有一个按钮。

          enter image description here

          此按钮将根据检测线的位置标记仪器时间轴上的点。这样做是为了跟踪自上一个标记以来的所有分配,或者如果没有其他标记则从头开始跟踪。您可以在运行分配工具时或在停止运行后标记代,如下例所示:

          enter image description here

          步骤6.查看堆栈跟踪

          最后要讨论的是查看堆栈跟踪。为此,您需要设置检查范围以突出显示所有分配,然后查看统计信息视图,确保已创建&在右侧面板上选择持久性气泡。在统计视图中,确保Persistent Bytes从最高到最低排序。这里有很多分配,很难理解发生了什么,因为很多都是系统分配。

          enter image description here

          深入了解

          1. 查看最大的分配,然后单击向右箭头。很多时候,你点击的内容会有分配,其中很多都不会对你有意义。
          2. enter image description here

            1. 在单击箭头后突出显示不同的分配时,请继续查看右侧面板上的扩展详细信息。最终,您会遇到一些粗体文本,这些文本会导致您的项目中出现实际代码,并告诉您可能出现的问题。
            2. enter image description here

              1. 如果双击堆栈跟踪中的一个粗体项,它将转到实际代码(假设您在自己拥有的应用程序上运行分配)。
              2. enter image description here

                1. 这个视图有很多有用的东西,一个是右边的黄色标签,显示每个方法调用占用多少内存。每个应用程序都是不同的,因此您(开发人员)必须决定突出显示的方法是否存在问题,您可以优化的方法,或者只是应用程序中不可避免的部分。

                2. 在我的情况下,UIColor变量是持久的并且在整个应用程序中使用,因此在我们的应用程序的整个生命周期中都是可接受的。

                3. found here