[Xcode 4.2在viewDidLoad或viewDidDisappear上的调试将在EXC_BAD_ACCESS上结束

问题描述 投票:3回答:5

viewDidLoadviewDidDisappear上的Xcode 4.2调试将在EXC_BAD_ACCESS上结束

它在该断点处中断,但是在继续执行(“继续执行程序”)时,它将在线程1(0开始)上返回EXC_BAD_ACCESS(代码= 1,地址= 0x ....)。在早期版本中没有发生这种情况。

有人遇到相同的错误?有人知道如何处理吗?

示例代码很简单:

 - (void) viewDidDisappear:(BOOL)animated {  
       [super viewDidDisappear:animated];
        NSLog(@"View did dissapear");    
    }

在断点上调试时(与NSLog一致),然后单击继续,它将在该EXC_BAD_ACCESS上结束。如果没有断点,那么一切正常。

我正在使用Xcode 4.2 Build 4D199(OS X Lion 10.7.2)。使用LLDB调试器。

更新:在所有异常中都放一个中断,它总是在线程8上结束:EXC_BAD_ACCESS-0x1f43:movl(%ebx),%eax-第0行:开始。...

更新2:玩过Xcode,我真的不知道为什么,但是知道它能工作。没有代码更改...嗯...奇怪...

iphone ios xcode debugging viewdidload
5个回答
2
投票

您必须始终在您覆盖的所有superviewWill...方法中始终调用viewDid...。例如,

- (void) viewDidDisappear:(BOOL)animated {
        NSLog(@"View did disapear");
        [super viewDidDisappear:animated];
}

2
投票

如果重写此方法,则必须在实现中的某个时刻调用super。

来自文档,我不知道是不是导致您不良访问的问题,但这至少是您必须修复的问题。


2
投票

您对您提供的代码没有太大帮助。

设置malloc_error_break并启用僵尸,看看是否会导致某些问题


2
投票

我在viewDidDisappear:animated上收到相同的错误-事实证明我有一个错字调用[self viewDidDisappear:animated];而不是[super viewDidDisappear:animated];

简单的解决方法,但起初不太明显。我很惊讶它没有给我警告。


0
投票

我在这里看到了稍微不同的问题。在我的情况下(SnowLeopard 10.6.8,XCode 4.2,LLVM 3.0),它在刹车点停止,但是XCode不显示任何调试信息。我可以看到我在GDB中的stackrace很好,但是本地值混乱了。有趣的是,我尝试使用performSelectorOnMainThread:它可以恢复XCode调试功能,但是某些东西会破坏活动帧值。

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
        [self performSelectorOnMainThread:@selector(_destroyMarketBrowser) withObject:nil waitUntilDone:YES];

}

顺便说一句:在模拟器中一切正常,问题仅在真实设备(5.0.1或5.1 Beta2)上发生

© www.soinside.com 2019 - 2024. All rights reserved.