我正在尝试解决我的第一个非常难的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];
}
答案 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。