Apple的Xcode开发环境是否提供了任何内存泄漏检测工具?
我对适用于iPhone SDK的工具特别感兴趣。目前我最喜欢的业余爱好编程项目平台
所述工具的文档/教程非常有用。
答案 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 -> ...
答案 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)
步骤1.选择分配工具
点击右上方的加号按钮,您可以为不同类型的测试添加更多乐器,但我不会在本教程中介绍它们。
步骤2.设置乐器设置
在运行任何分析之前,您需要做一些事情。首先,您需要插入安装了应用程序的iOS设备。它必须是物理设备,因为iOS模拟器仍然是模拟器,可能无法准确表示应用程序中的内存使用情况或应用程序在内存压力下的执行情况。
要选择目标,请点击顶部附近的我的电脑,将鼠标悬停在您的设备上,然后从子菜单中选择您的应用:
接下来,有一个面板,您可以在其中更改要查看的分配类型的设置。除了确保创建&检查持久性气泡,事先没有太多需要做的事。
步骤3.按记录运行仪器
按下左上方的“录制”按钮后,您的应用将在您的设备上启动,乐器将开始绘制您的分配图表。你需要做的就是运行你的应用程序,专注于可能的问题区域,看看是否有更多的内存分配而不是解除分配。这可能意味着要做很多重复的任务,但是你以后会感谢自己。
你应该看到这样的事情:
我建议您在应用程序中运行一次并获得内存中的稳定点,这样您就有了一个良好的基线,可以使任何增加明显。如果您对要测试的数据足够满意,请按左上角的停止按钮。
步骤4.分析
要实际设置检查范围,请使用键盘快捷键命令< 作为左侧检查范围,使用命令> 作为正确的检查范围。在我们的应用程序中,我们的基线大约为20MB。
我可以通过不同的方式分析这些数据,但是请注意,这里有一个完整的下拉菜单,可以查看和分析您的数据。
步骤5.标记世代
如果您不想同时处理检查范围,则会有一项名为Mark Generation的功能。右侧仪器面板上有一个按钮。
此按钮将根据检测线的位置标记仪器时间轴上的点。这样做是为了跟踪自上一个标记以来的所有分配,或者如果没有其他标记则从头开始跟踪。您可以在运行分配工具时或在停止运行后标记代,如下例所示:
步骤6.查看堆栈跟踪
最后要讨论的是查看堆栈跟踪。为此,您需要设置检查范围以突出显示所有分配,然后查看统计信息视图,确保已创建&在右侧面板上选择持久性气泡。在统计视图中,确保Persistent Bytes从最高到最低排序。这里有很多分配,很难理解发生了什么,因为很多都是系统分配。
深入了解
这个视图有很多有用的东西,一个是右边的黄色标签,显示每个方法调用占用多少内存。每个应用程序都是不同的,因此您(开发人员)必须决定突出显示的方法是否存在问题,您可以优化的方法,或者只是应用程序中不可避免的部分。
在我的情况下,UIColor变量是持久的并且在整个应用程序中使用,因此在我们的应用程序的整个生命周期中都是可接受的。