【问题标题】:Xcode 5 Instruments does not show zombiesXcode 5 Instruments 不显示僵尸
【发布时间】:2014-04-15 22:05:21
【问题描述】:

我无法发布图片,因为我还没有 10 个代表,所以如果其中有任何含糊之处,我深表歉意。

我正在为 Mac OS X 编写一个 ARC 应用程序,它会引发 EXC_BAD_ACCESS 错误。为了追查问题,我在“诊断”选项卡下启用了僵尸对象。

然后我启动 Instruments (Zombies)

最后我记录并导致应用程序崩溃并生成错误。但是,我没有在仪器中获得任何僵尸指标,而是收到我正在分析的应用程序问题报告,说我的应用程序“意外退出”。没有生成堆栈跟踪供我导航,并且该问题报告对我没有多大用处。

EXC_BAD_ACCESS 错误是否是由解除对已释放内存指针的引用以外的其他原因引起的?当出现 EXC_BAD_ACCESS 错误时,我是否应该总是期望在这种情况下得到 Zombies?如果是这样,我怎么能看到僵尸?我还需要配置什么来获取僵尸?

谢谢

【问题讨论】:

  • EXC BAD ACCESS 在我的经验中总是与引用一个解除分配的指针有关。僵尸是最难弄清楚的之一。它有时会在不是真正问题的地方中断,有时会与真正的问题相去甚远。

标签: ios xcode instruments profiler zombie-process


【解决方案1】:

EXC_BAD_ACCESS 错误是否是由解除对已释放内存指针的引用以外的其他原因引起的?

是的。该错误仅表示您的程序试图取消引用指向您的程序不允许访问的位置的指针。这可能是因为它指向一个不再存在的对象,但是当您使用指针而不首先将其设置为有效的东西时,或者当您错误地尝试使用非指针值作为指针。

当出现 EXC_BAD_ACCESS 错误时,我是否应该一直期望在这种情况下获得 Zombies?

否, NSZombieEnabled 仅帮助您找到您尝试访问已释放对象的情况。它不会帮助您处理产生 EXC_BAD_ACCESS 的其他情况。

【讨论】:

    【解决方案2】:

    您可以尝试在 Xcode 中添加异常断点。

    1. 在 Xcode 中点击“Breakpoint navigator”标签

    2. 点击加号

    3. 点击“添加异常断点”

    【讨论】:

    • 试过这个。 EXC_BAD_ACCESS 错误仍然抛出,调用堆栈仍然没有信息。