首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找和调试已放弃的内存和堆增长的提示

查找和调试已放弃的内存和堆增长的提示
EN

Stack Overflow用户
提问于 2010-10-25 11:14:52
回答 2查看 3.8K关注 0票数 7

我最近观看了WWDC 2010的一个视频: Session 311 -使用Instruments进行高级内存分析。链接是here

视频中有一个关于寻找被遗弃的记忆的有趣例子。他们说,调试通常比泄漏更重要,但也可能更困难。

放弃的内存被定义为“永远不再使用的可访问的已分配内存”。

泄漏被定义为“无法再访问的已分配内存”。

查找已放弃内存的主要方法是使用分配工具进行堆快照。

然而,在确定我在代码中放弃了内存之后,我发现很难准确地找出它来自哪里。

我正在寻找一些好的技巧或资源来寻找被遗弃的内存。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2011-11-22 10:16:40

在Instruments中,您可以获取由heapshot标识的任何对象的调用堆栈。截图:

所以我们在这里得到的是一个人为的例子,每次用户点击一个按钮时,我都会分配一个1MB的NSMutableData。在中心-底部窗格中,我有4个堆快照,并且我有一个展开的堆快照,以显示自上一个堆快照以来创建但未释放的对象。我突出显示了一个1.25MB的“非对象”分配,在右窗格中,它显示了发生此分配的确切调用堆栈。关于右侧面板的一个技巧是底部的滑块--它控制堆栈帧的消除。如果要查看所有堆栈帧,请将其一直拖到右侧。灰色的框架是那些你没有源代码的框架,而非灰色的框架是你的代码(或者你既有符号又有源代码的代码)。(另外,如果您没有看到右侧的面板,请检查工具栏中的“查看”按钮。)你还在寻找什么其他信息?

票数 5
EN

Stack Overflow用户

发布于 2012-12-15 05:32:15

总结bbum's excellent blog post

当应用程序不运行时,单击Allocations track标题旁边的小I并检查allocated.

  • Run reference counts;这将让你知道项目被保留在哪里,而不仅仅是它们在哪里模板你的应用程序,做点什么,然后返回到默认状态。例如,打开一个新的文档窗口,然后将其关闭。在Instruments.

  • Repeat步骤4和5中,

  • 多次单击“标记堆”按钮。

查看Instruments中的分配时,可以单击向右箭头按钮查看该实例的事件历史记录,包括分配、保留、释放和自动释放的所有位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4011683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档