-
02-07-2019 - |
题
Apple的Xcode开发环境是否提供了任何内存泄漏检测工具?
我对适用于iPhone SDK的工具特别感兴趣。目前我最喜欢的业余爱好编程项目平台
所述工具的文档/教程非常有用。
解决方案
有一个专门叫做Leaks
,就像上一张海报所说的那样,最简单的运行方法是直接来自Xcode:
运行 - <!> gt;从Performance Tool开始 - <!> gt;泄漏
它似乎非常擅长检测内存泄漏,对于像我这样的非C头很容易理解。
其他提示
从Xcode 6的Profile
菜单中选择Product
以启动Apple的Instruments工具。 (该应用程序位于Xcode应用程序的包内容中:/Applications/Xcode.app/Contents/Applications/
)
商业替代方案是 OmniObjectMeter 。(已停止Omni集团)
Clang Static Analyser
非常适合查找C,C ++和Objective-C代码中的错误:
以下是使用xcode中的仪器检测ios / mac应用程序的内存泄漏/性能的链接 从Xcode运行仪器的步骤
您可以通过menu -> run -> start with performance tool -> ...
Apple的Xcode开发环境是否提供了任何内存泄漏检测工具?
我对适用于iPhone SDK的工具特别感兴趣。
是。 Apple称他们为<!>“乐器<!>”; (这不仅仅是内存工具)。
参见Apple的 Introduction to Instruments User Guide
。请特别参阅 Locating Memory Issues in Your App
。它提供了如何使用面向内存的跟踪模板的示例。
ObjectAlloc和MallocDebug都应该对你有所帮助。如果您安装了整个SDK,则可以在Developer - <!> gt; Applications - <!> gt; Performance Tools中找到它们。
他们的名字给你一个很好的线索,关于他们的功能,OA,跟踪对象创建和MA是一般的内存泄漏工具。
我还没有尝试使用iPhone开发,但我必须相信他们也可以在那里工作。
假设您已注册ADC iPhone开发者网站,请在此处链接: Instruments User Guide
使用 rustyshelf's solution
时,请确保在iPhone而不是在模拟器上。内存使用情况大不相同。
总结了主要的内存泄漏工具: iphone-essential-performance-tools-list
尝试这个,一个从Xcode insturments开始的简单教程
步骤1.选择分配工具
- 选择分配的分析模板: 醇>
- 在主仪器界面上,单击VM Tracker(如果有),然后按Delete键,因为您不需要该特定仪器: 醇>
- 我要做的第一件事就是设置检查范围来测量基线的总持续字节数。该持久字节数位于分配摘要的正下方。 醇>
- 然后,我将我的右侧检查范围移动到我跑步的位置通过应用程序再次回到我们的根。在这里,你可以看到内存大致相同。因此,通过这样做几次并看到你的记忆回到我们的基线,你可以假设没有重大的内存问题。 醇>
- 查看最大的分配,然后单击向右箭头。很多时候,你点击的内容会有分配,其中许多对你没有意义。 醇>
- 在单击箭头后突出显示不同的分配时,请继续查看右侧面板上的扩展详细信息。最终,您会遇到一些粗体文本,这些文本会导致您的项目中出现实际代码,并告诉您可能出现的问题。 醇>
- 如果双击堆栈跟踪中的一个粗体项,它将转到实际代码(假设您在自己的应用程序上运行分配)。 醇>
-
这个视图有很多有用的东西,一个是右边的黄色标签,显示每个方法调用占用多少内存。每个应用程序都是不同的,因此您(开发人员)必须决定突出显示的方法是否有问题,您可以优化,或者只是应用中不可避免的一部分。
-
在我的情况下,UIColor变量是持久的并且在整个应用程序中使用,因此在我们的应用程序的整个生命周期中都是可接受的。
醇>
通过单击右上角的加号按钮,您可以为不同类型的测试添加更多乐器,但我不会在本教程中介绍它们。
步骤2.设置乐器设置
在运行任何分析之前,您需要做一些事情。首先,您需要插入安装了应用程序的iOS设备。它必须是物理设备,因为iOS模拟器仍然是模拟器,可能无法准确表示应用程序中的内存使用情况或应用程序在内存压力下的执行情况。
要选择目标,请点击顶部附近的我的电脑,将鼠标悬停在您的设备上,然后从子菜单中选择您的应用:
接下来,有一个面板,您可以在其中更改要查看的分配类型的设置。除了确保创建<!>放大器;检查持久性气泡,事先没有太多需要做的事。
步骤3.按记录运行仪器
按下左上方的“录制”按钮后,您的应用将在您的设备上启动,乐器将开始绘制您的分配图表。你需要做的就是运行你的应用程序,专注于可能的问题区域,看看是否有更多的内存分配而不是解除分配。这可能意味着要做很多重复的任务,但你以后会感谢自己。
你应该看到这样的事情:
我建议您在应用程序中运行一次并获得内存中的稳定点,这样您就有了一个良好的基线,可以使任何增加明显。如果您对要测试的数据足够满意,请按左上角的停止按钮。
步骤4.分析
要实际设置检查范围,请使用键盘快捷键命令<!> lt; 作为左侧检查范围,使用命令<!> gt; 进行正确检查范围。在我们的应用程序中,我们的基线大约为20MB。
分析这些数据有不同的方法,我不会在这里介绍,但请注意,有一个完整的下拉菜单可以查看和分析您的数据。
步骤5.标记世代
如果您不想同时处理检查范围,则会有一项名为Mark Generation的功能。右侧仪器面板上有一个按钮。
此按钮将根据检测线的位置标记仪器时间轴上的点。这样做是为了跟踪自上一个标记以来的所有分配,或者如果没有其他标记则从头开始跟踪。您可以在运行分配工具时或在停止运行后标记代,如下例所示:
步骤6.查看堆栈跟踪
最后要讨论的是查看堆栈跟踪。为此,您需要设置检查范围以突出显示所有分配,然后查看统计信息视图,确保创建<!>放大器;在右侧面板上选择持久性气泡。在统计视图中,确保Persistent Bytes从最高到最低排序。这里有很多分配,很难理解发生了什么,因为很多都是系统分配。
深入了解