9

由于看起来内存不足或内存损坏情况,我们的应用程序在现场偶尔会遇到崩溃(通过 BugSense 发现),因此为了帮助我追踪它们,我启用了以下功能:

  • 马洛克涂鸦
  • Malloc 保护边缘
  • 守卫马洛克
  • Objective-C 僵尸对象
  • Malloc 堆栈日志记录
  • 记录异常。

在模拟器中与应用程序交互一段时间(少于 30 秒)后,将显示以下消息:

GuardMalloc[TrafficDemoEmp-2430]: allocate_pages(): virtual memory exhaused!
GuardMalloc[TrafficDemoEmp-2430]: expandUniquingTable(): VMCopyFailed
GuardMalloc[TrafficDemoEmp-2430]: allocate_pages(): virtual memory exhaused!
GuardMalloc[TrafficDemoEmp-2430]: expandUniquingTable(): VMCopyFailed

禁用 Guard Malloc 后,应用程序可以正常工作,但启用后应用程序会因这些消息而崩溃。当我使用 Leaks and Allocations 工具进行分析时,没有发现任何泄漏,并且所有内存的 Live Bytes 值介于 30 MB 和 80 MB 之间(取决于它当时在做什么)。当然,对于应用程序来说,这不是太多的内存。

但是,这些消息指向我的应用程序使用了太多内存,但我不确定是什么导致了虚拟内存耗尽。Xcode 中是否有其他可用的工具或调试器设置来提供帮助?

谢谢,
大卫

4

1 回答 1

9

User1118321 是对的。NSZombies 是造成这个问题的原因。

提交此答案以便可以接受答案。

于 2013-01-09T04:41:03.300 回答