无法让Zombies在XCode中工作

时间:2010-10-31 16:44:07

标签: iphone objective-c xcode nszombie

我正在尝试解决我的第一个非常难的EXC_BAD_ACCESS问题。我从很多教程和博客中看到,我可以使用Zombies来帮助我弄清楚我哪里出错了。但我不认为我的僵尸正在工作,而且我绝对没有从控制台中获得任何有用的东西。

当我启动程序时,我会看到:This GDB was configured as "x86_64-apple-darwin".Setting environment variable "NSZombieEnabled" to null value.

最终,我看到了一些我使用的NSLog跟踪,然后是:

Program received signal:  “EXC_BAD_ACCESS”.

根本没有帮助。有任何想法吗?我有一种潜在的怀疑,即使僵尸工作也无法告诉我哪里发生了不良访问。 Objective C让我感到难过 - 这在ActionScript中需要3秒钟:(


你说崩溃在这里(下次编辑问题):

- (IBAction) toggleView{
if(switchableView.subviews.count != 0)
    [[switchableView.subviews objectAtIndex:0] removeFromSuperview];
UIViewController* newView = (viewSelector.selectedSegmentIndex == 0) ? [Login new] : [UserRegistration new];
[switchableView addSubview:newView.view];
//[newView release];
}

2 个答案:

答案 0 :(得分:2)

实际上你从控制台获得了一些有用的东西。它告诉你,你没有启用NSZombie - “设置环境变量”NSZombieEnabled“为空值。”

值必须为YES而不是null。

可执行文件 - >您的目标名称 - >参数 - >要在环境中设置的变量

即使没有启用NSZombies,也应该非常直截了当地查看来自您的调用堆栈的错误访问。动作脚本是一种脚本语言。

答案 1 :(得分:0)

没有理由为此错误必须由过度释放的对象引起。还有很多其他原因导致你崩溃。

Program received signal: “EXC_BAD_ACCESS”.

好的 - 那么它在哪里崩溃?什么是回溯?它应该已经崩溃到调试器,调试器应该向您显示一些有关崩溃的详细信息。

发布回溯以及恰好在该回溯中的任何代码。


这不是一个回溯,但它确实提供了更多的背景。回溯将有助于它将准确显示崩溃发生的位置。

就僵尸而言,我发现使用Run -> Run With Performance Tool -> Zombies菜单项在僵尸检测模式下启动仪器更容易。

当您注释掉release时崩溃消失肯定表明内存管理问题。您发布的代码看起来没问题,假设您没有覆盖new

您是否尝试过“构建和分析”?

您收到一个意外的表格表明您的代码中存在[显然]其他问题。那也可能包含内存管理问题?

此外 - 如果removeFromSuperview:导致稍后查询所选片段的视图发布& deallocate,也可能导致崩溃。


  目标C让我伤心 - 这会   在ActionScript中花了3秒钟

任何你不知道的事情会让你感到难过,当你试图将它当作你所知道的无关的东西来对待时。任何语言,工具或新环境的成功都与您的态度有关,因为它是工具的细节。

我建议您退后一步,做一些教程和/或read some documentation about debugging applications