如何在Xcode中启用NSZombie?


302

我有一个崩溃且没有错误跟踪的应用程序。如果调试,我可以看到部分情况,但无法弄清楚哪个对象正在“僵尸”化。

有人知道如何在Xcode 4中启用NSZombie吗?

Answers:


440

现在,环境变量已成为“方案”的一部分。

要编辑方案并打开僵尸,请执行以下操作:

  • 在“产品”菜单中,选择“编辑方案”。

  • 转到左侧面板中的“ Run Foo.app”阶段,右侧转到“ Arguments”选项卡。

  • 添加NSZombieEnabled到“环境变量”部分,并将值设置为YES,就像在Xcode 3中一样。


在Xcode 4.1及更高版本中,“运行”阶段的“诊断”选项卡上还有一个复选框,用于“启用僵尸对象”。


使用Xcode 6.4:

屏幕截图


5
是否不会中断对设备上已释放对象的调用,是否可以做到这一点?
jjxtra 2011年

95
它在4.2中再次更改,请参阅下面的答案。转到产品- >编辑方案- >诊断
摩西Kravchik

在Xcode中,在顶部(右侧的最后一个)“帮助”菜单中搜索“编辑方案”,它将在任何版本中每次都指向正确的方向。
2014年

如果我们在应用程序中启用了此NSZombieEnabled功能,我们是否应发布该应用程序以进行存储。因为我看到一个帖子说启用此功能后将其发布以存储不是一个好习惯。
SURESH SANKE

2
对于新手,请在Xcode 6.1中进入菜单产品>方案-编辑方案>诊断选项卡>复选框启用僵尸对象
Joshua Dance

146

我在对EXC_BAD_ACCESS进行故障排除时遇到了相同的问题,并且很难用Xcode 4.2(iOS5 SDK附带的最新代码)来查找设置。Apple不断前进,设置已不再是以前的样子。

幸运的是,我已经找到了它并且它适用于设备,而不仅仅是Simulator。您需要在Xcode中打开“产品”菜单,选择“编辑方案”,然后选择“诊断”选项卡。那里有“启用僵尸对象”。选择并在调试器中运行后,您将指向双重释放的对象!请享用!

简而言之

Product->Edit Scheme->Diagnostics-> Click Enable Zombie Objects

2
在Xcode中,在顶部(右侧的最后一个)“帮助”菜单中搜索“编辑方案”,它将在任何版本中每次都指向正确的方向。
2014年

43

产品>配置文件将启动Instruments,然后您应该有一个名为“ Zombies”的“跟踪模板”。但是,仅当当前构建目标是模拟器时,此跟踪模板才可用-如果将目标设置为iOS设备,则该跟踪模板将不可用。

还要注意的另一件事是,乐器库中没有实际的僵尸乐器。僵尸跟踪模板实际上由具有“启用NSZombie检测”启动配置集的“分配”工具组成。


13
“但是,仅当当前构建目标是模拟器时,此跟踪模板才可用”。谢谢!
2011年

谢谢,这就是我想要的!
Cliff Ribaudo 2012年

在Xcode中,在顶部(右侧的最后一个)“帮助”菜单中搜索“编辑方案”,它将在任何版本中每次都指向正确的方向。
unom 2014年

25

只需在可执行文件上设置一个环境变量(NSZombieEnabled = YES),然后像往常一样运行/调试应用程序即可。如果您向僵尸发送消息,则您的应用程序将崩溃/崩溃,并向NSLog您发送消息。

有关更多信息,请查看此CocoaDev页面:http : //www.cocoadev.com/index.pl? NSZombieEnabled

另外,随着10.6的发行以及Xcode and Instruments的下一版本,该过程将变得更加容易。只是说说而已。=)


完全同意。新的僵尸乐器非常棒。
奎因·泰勒

22

产品>配置文件将弹出仪器。从面板中选择僵尸并发疯。


5
@jluebbert我想说更加努力,因为我确实看到它,运行Xcode的4.02
garageàtrois

16

转到产品-方案-编辑方案-参数-环境变量设置NSZombieEnabled = YES

在此处输入图片说明

在此处输入图片说明


12

在xcode 4.2中

转到产品->编辑方案->单击运行yourappname.app->对角线->启用僵尸对象。



6

从Xcode 3.2.5和Snow Leopard(Mac OS X 10.6)开始,您可以通过Zombies工具运行代码Run > Run with Performance Tool > Zombies。这样,您就可以在时间轴上查看特定的对象及其保留计数。


1
我可以看到“僵尸”选项,但它显示为灰色。您知道它是如何启用的吗?
Rahul Vyas

@RahulVyas,我之前从未见过,但是您是否打开了垃圾收集功能?我可以看到僵尸在这种情况下没有意义
Dov

我已在显示受支持的[-fobjc-gc]的设置中打开了垃圾收集,但该选项仍被禁用。实际上,仪器类别中仅启用了最后5个选项。还有其他想法吗?还是我做错了什么?
Rahul Vyas

@RahulVyas:对不起,更清晰,我觉得打开垃圾收集将可能使植物大战僵尸,因为我不认为这是可能有垃圾收集僵尸。如果仍然不能解决问题,我建议您阅读仪器文档(每台仪器都有很好的书面记录),如果您仍然没有得到它,请在此处发布问题以引起广泛关注(并最终得到答案) 。
Dov

4

在Xcode 4.5.2中,转到“产品”->“编辑方案”->,然后在“诊断”选项卡下选中“ Objective C”和“ Enable Zombie Objects”之间的复选框,然后单击“确定”。


3

要启用Zombie日志记录,请双击Xcode项目的可执行文件组中的可执行文件。此时,单击Arguments选项卡,然后在Variables to be set in the environment:部分中,创建一个名为的变量NSZombieEnabled并将其值设置为YES


3

在XCode 4.0中:要在Instruments中检测NSZombie,请选择Simulator作为目标(无法在设备上检测NSZomboe)。运行仪器(CMD + I)并选择“僵尸”跟踪模板。请享用。


2

在可执行文件的首选项中,添加环境变量NSZombieEnabled并将其值设置为YES


2

在UR XCODE(4.3)中,旁边的播放按钮:)(运行)

选择:编辑方案

方案管理窗口将打开

单击参数选项卡

您应该看到:1-启动时传递了参数2-环境变量

(2-环境变量)位置名称:NSZombieEnabled
值:是

完成了...


1

NSZombieEnabled用于调试BAD_ACCESS,

从Xcode的方案表中启用NSZombiesEnabled环境变量。

Click on Product⇒Edit Scheme to open the sheet and set the Enable Zombie Objects check box

视频将帮助您了解我要说的话。


@kleopatra,谢谢您使用适当的设置更新了我的答案
user2554822 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.