2011-02-28 25 views
3

我正在寻找一种方法来打印所有分配的对象,当我得到转储全部分配对象

applicationDidReceiveMemoryWarning

有什么方法,我可以看到在内存中哪些对象。一个系统API调用,一个框架,任何真正的。

我知道Clang &通过代码检查进行调试,但我正在寻找一种方法来查看在运行时为什么我有内存泄漏。

对此提出建议?

谢谢:)

回答

2

使用仪器分配工具。您可以导航并查看所有活动对象。

-1

我不知道如何在运行时自己完成所有对象的跟踪。如果您在调试期间正在执行此操作,则可以暂停执行,并使用仪器对流程进行“堆积”处理。这会告诉你的一切已被分配在堆上。

+1

不完全;给出三个快照A,B和C(以及之前的基线),Heapshot向您显示在A点和B点之间分配的仍然存在于C点中的对象。普通的旧分配工具是OP所需要的。什么TomSwift说... – bbum 2011-03-01 04:51:35

+0

@bbum:感谢您的澄清:) – 2011-03-01 05:17:56

1

您可以使用仪器 - >泄漏工具来查看您的泄漏位置。它非常精确,你可以看到你分配对象的位置。

+0

泄漏对于确定为什么应用程序是巨大的*除非该应用程序也泄漏*,这往往不是这种情况。 – bbum 2011-03-01 04:52:07

+0

@bbum Ryan问道:我知道Clang和通过代码检查进行调试,但我正在寻找一种方法在运行时查看为什么我有内存泄漏。泄漏对于查看内存泄漏非常有用:) – Felics 2011-03-01 06:10:07

+0

泄漏只用于查找泄漏;许多程序 - 绝大多数程序 - 在分配中存在更大的内存使用问题,这些问题永远不会出现在泄漏中。泄漏不准确;它不能归因于运行时环境的细节和使用的检测算法。 – bbum 2011-03-01 06:44:22