如何在 Lion 下的 Xcode 4.1 Instruments 中启用 NSZombie?

Posted

技术标签:

【中文标题】如何在 Lion 下的 Xcode 4.1 Instruments 中启用 NSZombie?【英文标题】:How do you enable NSZombie in Instruments of Xcode 4.1 under Lion? 【发布时间】:2011-07-23 02:55:04 【问题描述】:

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

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

【问题讨论】:

你是指 Instruments 还是 Xcode?​​span> 与 Xcode 4.1 一起打包的工具...与 Instruments 4.1 中一样 【参考方案1】:

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

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

APPLE:首先,上面显示的 [in Apple's Forum] 已被操作系统的内部更改所淘汰,即 Zombie 设置现在由 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 开发者关系、开发者技术支持、核心操作系统/硬件

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

【讨论】:

【参考方案2】:

这是一种独特的乐器:

【讨论】:

岩浆,谢谢。我想我没有说明,但我的代码在模拟器中运行良好,我需要在我看到 exc_bad_access 的设备上运行 Zombies: -[ConfigData respondsToSelector:]:消息发送到已释放实例 0x17f900 @ric,我的错;但是我认为设备上的 Zombies 目前不能在 XCode 4.1 中的 Instruments 上使用。我很想被证明是错误的。【参考方案3】:

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

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

【讨论】:

以上是关于如何在 Lion 下的 Xcode 4.1 Instruments 中启用 NSZombie?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Mac App Store 指定 Xcode 4.1 的安装位置?

Xcode 4.1+ 自动布局复选框丢失

xcode4.2 for lion不知道如何设置

如何卸载 Xcode 4.4 命令行工具(Mac OS X 10.8 Mountain Lion)?

Control-Command-Up 未在 Lion 上的 Xcode 中切换到对应文件。

如何在 Lion 中开发 iOS 3.1.3 应用程序?