无法让僵尸在XCode中工作

问题描述:

我试图解决我的第一个非常难的EXC_BAD_ACCESS问题。我从很多教程和博客中看到,我可以使用僵尸工具来帮助我找出错误的地方。但我不认为我的僵尸正在工作,而且我明确地没有从控制台中获得任何有用的信息。无法让僵尸在XCode中工作

当我开始计划我看到这一点: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的让我伤心 - 这要花费3秒的ActionScript :(


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

- (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]; 
} 

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

该值需要为YES不为空。

可执行文件 - >您的目标名称 - >参数 - >变量,并在环境

设置即使没有NSZombies启用它应该是非常简单的,看看你的坏访问是从你的调用堆栈。动作脚本是一种脚本语言。

+0

谢谢你,我想我认为复选标记是yes的合理表示。我发现我的问题,但我无法理解解决方案。 – pseudopeach 2010-10-31 18:01:59

+0

由于autorelease的魔力,这并不总是很容易找到。当这些咬伤时,回溯并不总是有帮助的。 – 2010-10-31 18:05:06

+1

这有什么帮助。使用仪器,使用Object Alloc运行。停止您的应用程序,然后按下ObjectAlloc工具中的小“i”,并启用NSZombie检测以及引用计数。然后按“记录”,你的应用程序将运行(在模拟器中执行此操作),当你得到“不良访问”时,它将在仪器工具中用箭头标记 - 按下该按钮,你会看到每个都保留并释放目的。 – 2010-10-31 18:35:37

没有理由。这个错误必须由过度释放对象引起的有很多其他原因,你可能会崩溃

Program received signal: “EXC_BAD_ACCESS”.

OK - 所以它在哪里CRA李嘉诚?什么是回溯?它应该已经崩溃到调试器,调试器应该向您显示关于崩溃的一些细节。

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


这不是回溯,但它确实提供了更多的上下文。回溯会很有帮助,因为它可以准确显示碰撞发生的位置。就僵尸而言,我发现使用Run -> Run With Performance Tool -> Zombies菜单项来启动僵尸检测模式下的乐器更容易。

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

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

你得到一个意外的表格表明你的代码中有[明显]其他问题。这也可能包含内存管理问题呢?

此外 - 如果removeFromSuperview:导致稍后查询所选段的视图以释放&解除分配,那也可能导致崩溃。


目标C让我伤心 - 这将 采取3秒的ActionScript

任何你不知道让你难过的时候你试图把它当作无关的东西是你知道。任何语言,工具或新环境的成功与您的态度一样,也是工具的细节。

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

+0

这里是它崩溃的地方。我试图加载一个表到子视图。它在我加载常规视图控制器时工作 - 不是表格。 – pseudopeach 2010-10-31 17:57:47

+0

(IBAction为)toggleView { \t如果(switchableView.subviews.count!= 0) \t \t [[switchableView.subviews objectAtIndex:0] removeFromSuperview]; \t UIViewController * newView =(viewSelector.selectedSegmentIndex == 0)? \t \t [Login new]:[UserRegistration new]; \t [switchableView addSubview:newView.view]; \t // [newView release]; } – pseudopeach 2010-10-31 17:58:12

+0

如果我发布该版本,它会加载一个表格,但并不是我所期望的。如果我不释放对象,是不是内存泄漏? 我读过这个:http://*.com/questions/937767/does-uiviews-addsubview-really-retain-the-view,但我真的不明白解决方案 – pseudopeach 2010-10-31 18:00:11