由于看起来内存不足或内存损坏情况,我们的应用程序在现场偶尔会遇到崩溃(通过 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 中是否有其他可用的工具或调试器设置来提供帮助?
谢谢,
大卫