【问题标题】:How to enable NSZombie in Xcode?如何在 Xcode 中启用 NSZombie?
【发布时间】:2011-07-20 03:50:24
【问题描述】:

我有一个应用程序在没有错误跟踪的情况下崩溃。如果我调试,我可以看到正在发生的部分情况,但无法确定哪个对象是“僵尸”。

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

【问题讨论】:

    标签: xcode nszombie


    【解决方案1】:

    环境变量现在是“方案”的一部分。

    要编辑方案并打开僵尸:

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

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

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


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


    使用 Xcode 6.4:

    【讨论】:

    • 不会中断对设备上已释放对象的调用,有什么方法可以实现吗?
    • 它在 4.2 中再次更改,请参阅下面的答案。转到产品->编辑方案->诊断
    • 在 Xcode 中,在顶部的帮助菜单(右侧最后一个)中搜索“编辑方案”,它会在任何版本中每次都为您指明正确的方向。
    • 如果我们为我们的应用启用此 NSZombieEnabled 功能,我们是否应该将应用发布到商店..?因为我看到一个帖子说,当我们启用此功能时,发布到存储不是一个好习惯。
    • 对于后面的菜鸟,在 Xcode 6.1 中,您可以转到菜单 Product> Scheme-Edit Scheme>Diagnostics tab>Checkbox Enable Zombie Objects
    【解决方案2】:

    我在排除 EXC_BAD_ACCESS 时遇到了同样的问题,并且很难找到 Xcode 4.2(iOS5 SDK 附带的最新版本)的设置。苹果一直在移动,设置不再是以前的样子。

    幸运的是,我找到了它,它适用于设备,而不仅仅是模拟器。您需要在 Xcode 中打开 Product 菜单,选择 Edit scheme,然后选择 Diagnostics 选项卡。那里有“启用僵尸对象”。一旦选择并在调试器中运行,您将指向双重发布的对象!享受吧!

    总之

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

    【讨论】:

    • 在 Xcode 中,在顶部的帮助菜单(右侧最后一个)中搜索“编辑方案”,它会在任何版本中每次都为您指明正确的方向。
    【解决方案3】:

    Product > Profile 将启动 Instruments,然后您应该有一个名为“Zombies”的“Trace Template”。但是,此跟踪模板仅在当前构建目标是模拟器时可用 - 如果您将目标设置为 iOS 设备,它将不可用。

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

    【讨论】:

    • “但是,此跟踪模板仅在当前构建目标是模拟器时可用”。谢谢!
    • 谢谢,这正是我想要的!
    • 在 Xcode 中,在顶部的帮助菜单(右侧最后一个)中搜索“编辑方案”,它会在任何版本中每次都为您指明正确的方向。
    【解决方案4】:

    在您的可执行文件(NSZombieEnabled = YES) 上设置一个环境变量,然后正常运行/调试您的应用程序是一件简单的事情。如果您向僵尸发送消息,您的应用程序将崩溃/中断到调试器和NSLog 的消息你。

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

    此外,随着 10.6 和 Xcode 和 Instruments 的下一个版本的发布,这个过程将变得更加容易。只是说'。 =)

    【讨论】:

    • 完全同意。新的僵尸乐器很不错。
    【解决方案5】:

    Product > Profile 会弹出 Instruments。从面板中选择僵尸并发疯。

    【讨论】:

    • @jluebbert 我会说更加努力,因为我确实看到了,运行 Xcode 4.02
    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

      在 xcode 4.2 中

      转到,产品 -> 编辑方案 -> 单击运行 yourappname.app -> 诊断 -> 启用 Zombie 对象。

      【讨论】:

        【解决方案8】:

        这里有一段视频和解释如何使用 Instruments 和 NSZombie 来查找和修复 iOS 上的内存崩溃: http://www.markj.net/iphone-memory-debug-nszombie/

        【讨论】:

          【解决方案9】:

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

          【讨论】:

          • 我可以看到僵尸选项,但它是灰色的。你知道它是如何启用的吗?
          • @RahulVyas,我以前从未见过这种情况,但是您是否打开了垃圾收集?我可以看到僵尸在这种情况下没有意义
          • 我已在显示支持的设置中打开垃圾收集 [-fobjc-gc] 但该选项仍被禁用。事实上,仪器类别中仅启用了最后 5 个选项。还有什么想法吗?还是我做错了什么?
          • @RahulVyas:抱歉,说得更清楚一点,我认为关闭垃圾收集关闭可能会启用僵尸,因为我认为僵尸不可能有垃圾收集.如果这不能解决问题,我建议您阅读 Instruments 文档(他们对每种仪器都有很好的说明),如果您仍然没有得到它,请在此处发布问题以获得更广泛的关注(并最终获得答案) .
          【解决方案10】:

          在 Xcode 4.5.2 中转到 Product -> Edit Scheme -> 并在 Diagnostics 选项卡下选中 Objective C 和 Enable Zombie Objects 之间的复选框,然后单击 OK

          【讨论】:

            【解决方案11】:

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

            【讨论】:

              【解决方案12】:

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

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                  【解决方案14】:

                  在你的 XCODE (4.3) 旁边的播放按钮:) (运行)

                  选择:编辑方案

                  将打开方案管理窗口

                  单击“参数”选项卡

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

                  在(2-环境变量)的地方 名称:NSZombieEnabled
                  值:是的

                  它已经完成了......

                  【讨论】:

                    【解决方案15】:

                    NSZombieEnabled 用于调试 BAD_ACCESS,

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

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

                    这个video 将帮助你明白我想说什么。

                    【讨论】:

                    • @kleopatra 感谢用适当的设置更新了我的答案
                    猜你喜欢
                    • 1970-01-01
                    • 2011-07-10
                    • 2015-06-17
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-11-11
                    • 2015-09-21
                    相关资源
                    最近更新 更多