应用程序崩溃,没有任何日志信息。

3

我有一个UIViewController,在另一个ViewController的导航控制器中推出。它包含一些视图、按钮、滚动视图和加速度计支持。当我点击导航控制器的“返回”按钮时,应用程序崩溃,没有任何日志消息,除了这个: “warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.3 (8J2)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found). (gdb)” 调试器将我链接到main.m中的这一行:

int retVal = UIApplicationMain(argc, argv, nil, nil);

出现 "EXEC_BAD_ACCESS",这是什么意思?

编辑: 你们都是对的。 问题出在加速计上。我设置了委托([UIAccelerometer sharedAccelerometer].delegate = self;),但没有移除它。这就是为什么我的代码中没有调试器链接的原因。我只需要添加这一行:

 - (void)viewWillDisappear:(BOOL)animated {
        [UIAccelerometer sharedAccelerometer].delegate = nil;
    }

问题就这样解决了。因此,如果您正在使用任何设备功能,请注意委托。

4个回答

6
你是否已将僵尸对象(Zombies)功能设置为启用?这将让你追踪已经释放的对象,并显示它们的名称。
如果你在使用XCode 4,可以通过勾选“启用僵尸对象”复选框,在项目->编辑模式->诊断中启用僵尸对象。
此外,确保你已经将"异常中断"设置为开启状态。在XCode 4中,进入断点视图,点击左下角的加号,并选择"添加异常断点..."来针对所有异常进行设置。这样,XCode就会在异常发生的地方中断执行,并且你将会看到比UIApplicationMain更多的相关信息。

这非常有帮助。谢谢! - Christoph Winkler

1

这意味着您尝试读取/写入一个您没有权限的内存块。也许您正在尝试使用未分配/初始化的对象。检查您的代码,调试它并检查变量以找到解决方案。


谢谢您的回应。通常情况下,它会链接到我使用它的那一行,但这一次没有。也许我在问题描述上不够清晰:我可以使用什么方法,以便不把我链接到代码中的任何一行?PS非常抱歉我的英语不好。 - SentineL
在Objective-C和Xcode中进行开发有点令人沮丧:当你遇到这种错误时,你不知道堆栈跟踪和错误所在的位置。尝试调试和检查变量。 - Daniel Albert
也许你设置了一个属性,但你没有保留它。我指的是:https://dev59.com/f0_Ta4cB1Zd3GeqPA3NU - Daniel Albert

1

我猜你遇到了内存警告,当你返回时,你的应用程序释放了一些已经不存在的数据。

didReceiveMemoryWarningdeallocviewDidUnloadviewDidLoad中设置一些断点,以查看前一个控制器中发生了什么。


1

EXC_BAD_ACCESS是一个异常(EXCeption_BAD_ACCESS)。

如果你在objc_exception_throw上设置断点(调试选项卡左下角的加号),你就会得到这些信息。

你可能想看一下NSZombieEnabled(http://www.cocoadev.com/index.pl?NSZombieEnabled),因为你可能正在尝试访问一个已经被释放的对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接