Xcode的调试导航器没有用吗?

时间:2019-02-05 18:12:39

标签: xcode debugging memory-management memory-leaks allocation

我正在Xcode中构建一个应用程序,现在深入到该项目的内存管理部分。当我使用分配和泄漏时,我似乎得到的结果与Xcode调试面板中看到的结果完全不同:特别是调试面板显示的内存使用率比我在分配中看到的要高得多,并且它似乎还突出显示了迄今为止的泄漏。我可以说(1)不存在,并且(2)被“泄漏”工具确认为不存在。这件事是没有用的,甚至是更令人误解的吗?

这是一个新的例子:今天它告诉我我正在使用> 1 GB的内存,但是它的小内存计却显着读取了<1 GB(如果分配数据是准确的,那还是错误的)。下图。

enter image description here

更新:我在一个38分钟的会话中运行了VM Tracker,它的确显示出虚拟内存是分配/泄漏与内存量之间的差异。下图。我还不确定如何考虑这一点。我们的游戏使用大量被交换的纹理。我想这在我们这种规模的大多数游戏中很常见(11个板,330个关卡;每个板和地图屏幕都有独特的图稿)。

enter image description here

1 个答案:

答案 0 :(得分:2)

您可能在使用Debug构建配置在Simulator中运行时使用了Memory Gauge。两者都会给您带来误导的记忆结果。知道如何管理内存的唯一可靠方法是使用Release版本在设备上运行。 Instruments使用Release版本的配置,因此它已经比运行和使用Memory Gauge更好了。

此外,众所周知的缺陷是Xcode内置的内存工具(例如Memory Debugger)会为泄漏生成误报。

但是,Instruments也有其缺陷。我的经验是,例如,它无法捕获应用程序启动期间生成的泄漏。另一个问题是人们并不总是了解如何读取其输出。例如,您说:

  

调试面板显示的内存使用率比我在分配中看到的要高

是的,但是分配不是全部。您可能无法查看VM分配。那些被分开显示,并且经常构成占用大量内存的原因(因为它们包括图像的后备存储和视图渲染树)。 Memory Gauge确实包含虚拟内存,因此仅此一项就可以解决您认为正在看到的“差异”。

因此,您的问题的答案是:不,内存规并非没有用。它可以很好地提示您何时需要对内存问题发出警报。但是,然后您应该转到仪器进行适当的分析。