如何追踪僵尸对象崩溃?

Posted

技术标签:

【中文标题】如何追踪僵尸对象崩溃?【英文标题】:How to track down zombie object crash? 【发布时间】:2013-12-12 02:39:20 【问题描述】:

我的 ios 应用程序发生了一些有线崩溃,并且它不是 100% 可重现的。从崩溃日志中,我可以看到无法识别的选择器(属性访问器)被发送到类型不正确的对象(很可能是僵尸)。 XCode 中是否有我可以用来查看我是否正在尝试访问僵尸对象的方法?

谢谢。

【问题讨论】:

可以更具体。 【参考方案1】:

有两种方法。 1.转到XCode左侧的断点部分,向下可以看到添加异常断点的选项。 2. 点击菜单栏 > 产品 > 方案 > 编辑方案 选择“诊断”选项卡并单击“启用僵尸对象”

希望对你有帮助:)

【讨论】:

【参考方案2】:

有几种方法。您可以通过在当前构建方案的运行项的诊断选项卡中将“启用僵尸对象”复选框设置为 true 来打开僵尸。

您可以在您的应用程序的 Instruments 工具中运行 Zombies 乐器(从项目菜单中选择“profile”,然后在出现的对话框中,选择 Memory 乐器组,然后查找“Zombies”乐器。这是实际上只是打开了工具的分配工具。

当您使用任一方法打开僵尸监控时,系统将不再释放已释放的对象。相反,它们标有一个特殊的签名,表明它们是僵尸。然后下次你尝试引用一个对象时,你会立即得到一个非常具体的崩溃,并且系统仍然可以判断它在变成僵尸之前是什么类型的对象,并且使用 Instruments 你甚至可以知道它在程序中的哪个位置被分配.

【讨论】:

以上是关于如何追踪僵尸对象崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin Studio 中启用僵尸对象

第35条:用“僵尸对象”调试内存管理问题

仪器在僵尸时崩溃

无法在设备的仪器中找到僵尸

使用 dispatch_semaphore 时 iOS 14 崩溃僵尸

用"僵尸对象"调试内存管理问题