内存泄漏检测工具

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

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

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

有一个专门叫Leaks ,就像以前的海报说,最简单的方法来运行它是直接从Xcode:

运行 – >开始使用性能工具 – >泄漏

在检测内存泄漏方面似乎非常好,对于像我这样的非C类头脑来说很容易。

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

OmniObjectMeter是一个商业的替代品 。 (由Omni集团终止)

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

这里是使用xcode的仪器来检测你的ios / mac应用程序的内存泄漏/性能的链接从Xcode 运行仪器的步骤

你可以运行在Xcode menu -> run -> start with performance tool -> ...

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

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

是。 苹果称它们为“乐器”(不仅仅是记忆工具)。

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

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

他们的名字给你一个很好的线索,他们的function,OA,跟踪对象创build和MA是一个通用的内存泄漏工具。

我还没有尝试过iPhone开发,但我不得不相信,他们也会在那里工作。

假设你已经注册了ADC的iPhone开发者网站,这里的链接如下: Instruments User Guide

当使用rustyshelf's solution确保您在iPhone上进行testing,而不是在模拟器上进行testing。 内存使用情况大不相同。

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

试试这个也是一个简单的教程,从Xcode开始

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

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

在这里输入图像描述

第1步。select分配工具

  1. select分配的分析模板:

在这里输入图像描述

  1. 在仪器的主界面上,单击虚拟机跟踪器(如果存在),然后按Delete键,因为您不需要特定的仪器:

在这里输入图像描述

通过点击右上angular的加号button,可以为不同种类的testing添加更多的工具,但是本教程中我将不会介绍这些工具。

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

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

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

在这里输入图像描述

接下来,有一个面板,您可以更改将要查看的分配types的设置。 除了确保创build和持久泡沫被检查,事先没有什么需要做的。

在这里输入图像描述

第3步。按logging运行仪器

一旦按下左上方的“录制”button,您的应用程序将在您的设备上启动,乐器将开始绘制您的分配图。 所有你需要做的是通过你的应用程序来运行,关注可能的问题领域,看看是否有更多的内存分配而不是释放。 这可能意味着做了很多重复的任务,但是稍后你会感谢你自己。

你应该看到这样的东西:

在这里输入图像描述

我build议一次运行你的应用程序,并在内存中获得一个稳定的点,所以你有一个很好的基线,将使任何增加明显。 当您满意时,您有足够的数据进行testing,请按左上方的停止button。

第4步。分析

  1. 我做的第一件事是设置我的检查范围,以测量基线的总持续字节数。 该持久字节号位于分配汇总的正下方。

在这里输入图像描述

要实际设置检查范围,请使用键盘快捷键Command <左侧检查范围和Command>右侧检查范围。 在我们的应用程序中,我们有一个大约20MB的基线。

在这里输入图像描述

  1. 然后,我将右边的检查范围移到我再次运行应用程序的地方,然后回到我们的根目录。 在这里,你可以看到内存大致相同。 所以,通过再做几次,看到你的记忆回到我们的基线,你可以认为没有重大的记忆问题。

在这里输入图像描述

有不同的方式来分析这些数据,我不会在这里介绍,但请注意,有一个下拉菜单可以查看和分析数据。

在这里输入图像描述

步骤5.标记世代

如果你不想处理检查范围,有一个称为标记生成的function。 仪器的右侧面板上有一个button。

在这里输入图像描述

该button将根据检查线的位置在仪器的时间线上标记点。 它是为了追踪自上一个商标以来的所有分配,或者是在没有其他商标的情况下从头开始。 您可以在运行分配工具时或在停止运行之后标记世代,如下例所示:

在这里输入图像描述

第6步。检查堆栈跟踪

最后要说的是看堆栈跟踪。 为此,您要设置检查范围以突出显示所有分配,然后查看统计视图,确保在右侧面板上select了创build和持续气泡。 在统计视图中,确保持久字节从最高到最低sorting。 这里有很多的configuration,很难理解正在发生什么,因为它们中有很多是系统分配。

在这里输入图像描述

深入

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

在这里输入图像描述

  1. 点击箭头后突出显示不同的分配,继续查看右侧面板上的扩展详细信息。 最终你会遇到一些粗体的文本,导致你的项目中的实际代码,告诉你可能是什么问题。

在这里输入图像描述

  1. 如果双击堆栈跟踪中的其中一个粗体项目,它会将您带到实际的代码(假设您在您拥有的应用程序上运行了分配)。

在这里输入图像描述

  1. 这个视图有很多有用的东西,其中一个是右边大部分黄色的标签,告诉你每个方法调用的内存有多less。 每个应用程序是不同的,所以你,开发人员,必须决定是否突出显示的方法是一个问题,你可以优化,或者只是你的应用程序不可避免的一部分。

  2. 在我的情况下,该UIColorvariables是持久的,并在整个应用程序中使用,因此,在我们的应用程序的整个生命周期。

在这里find