我的一个应用程序在运行时崩溃,但没有错误跟踪信息。如果我进行调试,可以看到部分情况,但无法确定哪个对象正在“僵尸化”。
有人知道如何在Xcode 4中启用NSZombie吗?
我也遇到了调试EXC_BAD_ACCESS的问题,在使用带iOS5 SDK的Xcode 4.2时,花费了很长时间才找到设置。苹果不断地移动东西,这些设置已经不在它们原来的地方了。
幸运的是,我找到了解决方法,并且不仅适用于模拟器,也适用于设备。你需要打开Xcode的“Product”菜单,选择“Edit scheme”,然后选择“Diagnostics”标签页。在那里你会看到“Enable Zombie Objects”。一旦选中并在调试器中运行,就会指向重复释放的对象!享受吧!
简而言之
Product->Edit Scheme->Diagnostics-> Click Enable Zombie Objects
产品 > 简介将启动工具,然后应该有一个名为“Zombies”的“Trace Template”。但是此跟踪模板仅在当前构建目标为模拟器时才可用-如果您将目标设置为iOS设备,则不可用。
还要注意的另一件事是,在工具库中实际上没有“Zombies”工具。实际上,“Zombies”跟踪模板包含了启用“NSZombie检测”的配置的“Allocations”工具。
(NSZombieEnabled = YES)
,然后像平常一样运行/调试你的应用程序。如果消息发送到一个"僵尸对象",你的应用程序将崩溃/中断到调试器,并为你记录一个NSLog
消息。在产品 > 概要资料中,会弹出仪器选项。从面板中选择僵尸,并疯狂操作。
前往 产品 - 架构 - 编辑架构 - 参数 - 环境变量,设置NSZombieEnabled = YES
在xcode 4.2中
前往:Product(产品) -> 编辑方案 -> 点击运行“yourappname.app” -> 诊断 -> 启用僵尸对象。
这里有一个视频和解释,介绍如何使用Instruments和NSZombie来查找和修复iOS上的内存崩溃:
http://www.markj.net/iphone-memory-debug-nszombie/从 Xcode 3.2.5 和 Snow Leopard(Mac OS X 10.6)开始,你可以使用 Zombies 工具来运行代码:运行 > 运行性能工具 > Zombies
。这可以让你在时间线上查看特定对象及其保留计数。