在加载我的cocoa应用程序期间,我的程序崩溃并显示消息EXC_BAD_ACCESS。堆栈跟踪没有帮助。有关我如何找到问题的任何线索?
答案 0 :(得分:5)
我曾经看到过,当您尝试访问未正确保留的对象时会发生这种情况,因此它不会指向对象的有效副本,也不会指向另一种类型的对象。提前放置断点并在使用po进行启动时分析对象并在gdb中打印是最好的选择。
答案 1 :(得分:2)
这通常表示存储器管理错误。
确保所有插座声明都遵循最佳做法:
@interface MyClass : MySuperclass {
UIClass *myOutlet;
}
@property (nonatomic, retain) IBOutlet UIClass *myOutlet;
@end
此格式可确保您在具有任何超类的任何平台上获得内存管理。
检查所有awakeFromNib
方法,确保您不会过度释放对象等。
答案 2 :(得分:1)
旧线程的新答案...在XCode 4中,诊断EXC_BAD_ACCESS异常的最有效方法是使用Instruments来分析您的应用程序(从XCode单击产品/配置文件并选择Zombies)。这将帮助您识别发送到解除分配对象的消息。
答案 3 :(得分:0)
补充一点:解开失败的首要原因是忘记“回归自我”;来自自定义类的-init。它伤害了很多:(
答案 4 :(得分:0)
检查控制台日志(Applications / Utilities / Console.app)。当程序在启动时崩溃,并且初始化出现问题时,它会在崩溃之前在那里写出一些有用的错误消息。
答案 5 :(得分:-3)
这是一个可能的原因。有一个IBOutlet对象没有被初始化,并且在nil上调用了一条消息。堆栈跟踪可能如下所示:
#0 0x90a594c7 in objc_msgSend
#1 0xbffff7b8 in ??
#2 0x932899d8 in loadNib
#3 0x932893d9 in +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:]
#4 0x9328903a in +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:]
#5 0x93288f7c in +[NSBundle(NSNibLoading) loadNibNamed:owner:]
#6 0x93288cc3 in NSApplicationMain
#7 0x00009f80 in main at main.mm:17
由于堆栈跟踪没有帮助,您必须单步执行代码才能找到错误。如果由于某种原因你无法在执行的早期设置断点,请尝试插入一些Debugger();将打破调试器的调用。