4

这仅适用于新的 Xcode 4.1,特别是在 Lion 上运行。如何在 Instruments 中启用 NSZombie?它不再像 Xcode 4.0 那样位于启动配置下 (i) 图标的分配中。也没有名为 Zombies 的库条目。

当然问题是我不能回退到 Xcode 4.0,因为它拒绝在 Lion 下运行,所以我陷入了困境!任何其他使用 Lion 的前沿开发人员,比我有更多经验,可以帮助解决这个问题吗?谢谢。-里克

4

3 回答 3

7

关于我自己的问题,我从 Apple 那里得到了这个非常有用的答案。是逐字逐句——

我:关于如何找到那些难以释放的对象,在设备上进行测试,使用 Xcode 4.1.1 和/或 Instruments 是否有更新?

苹果:首先,上面显示的黑客[在苹果论坛]已经被操作系统的内部更改所淘汰,即僵尸设置现在由 CF 完成。您可以使用下面显示的代码强制启用僵尸:

extern void _CFEnableZombies(void);

int main(int argc, char **argv) { _CFEnableZombies();

... rest of your main ...

}

重要提示:_CFEnableZombies 函数是私有的,因此您甚至不会考虑将此代码放入生产应用程序中。但是,这不是秘密。您可以通过查看 Lion 的 Darwin 开源代码来了解它是如何实现的。

http://www.opensource.apple.com/source/CF/CF-635/CFRuntime.c

如果你这样做,无论你如何运行它,当你向僵尸发送消息时,你的应用程序都会停止(带有断点异常)。因此,您可以使用 Allocations 工具在 Instruments 中运行它,并获得僵尸检测和分配跟踪。

请注意,当僵尸收到消息时,系统会打印如下内容:

*** -[ ]: 发送到已释放实例的消息“

这不会出现在 Instruments 控制台区域中;您必须使用 Xcode Organizer(或 iPCU)来查看它。

分享和享受

奎因“爱斯基摩人!” Apple 开发者关系、开发者技术支持、核心操作系统/硬件

我:希望在这种情况下这对你们中的一些人有用。

于 2011-08-12T19:17:38.037 回答
3

这是一种独特的乐器:

僵尸作为一个单独的工具

于 2011-07-23T03:56:59.597 回答
2

还有另一种在设备上使用 NSZombie 运行的方法,但这是通过 XCode 4 而不是仪器完成的。

要在设备上使用 NSZombie 运行,请打开您的 XCode 项目并单击顶部菜单项“产品”,然后按住 alt 并单击“运行”,这将打开一个单独的窗口,您将在窗口底部看到“环境变量” . 点击“+”并输入“NSZombieEnabled”作为名称,输入“YES”作为值。

于 2011-08-01T17:49:10.337 回答