[英]Debug Iphone Program received signal: “EXC_BAD_ACCESS”
我搜索并尝试了很多。 但是我真的不知道该如何解决– 感谢您的帮助
错误消息:
Program received signal: “EXC_BAD_ACCESS”.
生产线投掷味精
log(sos_Trace, @"sendMail");
重要
我使用了以下日志记录库: http : //code.google.com/p/soslog-objc/
完整的源文件
#import "ContactViewController.h"
#import "SOSLog.h"
@implementation ContactViewController
@synthesize mailButton, delegate;
- (void)viewDidLoad {
self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"bg_tile.gif"]];
[super viewDidLoad];
}
- (IBAction)sendMail:(id)sender {
NSLog(@"sendMail");
log(sos_Trace, @"sendMail");
[delegate mail:self];
}
- (void)dealloc {
[self.mailButton release];
self.delegate = nil;
[super dealloc];
}
@end
看一下SOS日志记录框架的源代码log(sos_Trace, @"sendMail");
除非您在别处有破坏日志记录基础结构内部的代码, 否则崩溃的根源不可能。
发布崩溃的完整堆栈跟踪。
正如@benzado指出的那样,您的内存管理代码中有一些错误。 修复那些。 我建议对代码运行静态分析器,并修复发现的任何内容。 Xcode中的shift-cmd-A应该可以解决问题。
另外,如果要记录调用方法的时间,则可以在任何方法中使用 :
log(sos_Trace, NSStringFromSelector(_cmd));
要么:
NSLog(@"[%@ %@] -- your message here", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
我以前没有使用过soslog框架,因此在此我无法提供任何见解。 但是,EXC_BAD_ACCESS通常是由于尝试访问已取消分配或从未初始化过的对象而引起的。 在调用它之前是否已设置sos_Trace?
EXC_BAD_ACCESS
表示您试图访问无效地址的内存。 当您尝试使用尚未初始化并且指向内存中某个随机位置的指针时,通常会发生这种情况。
我对该日志库一无所知,但我想您需要调用一些设置或初始化函数。 但是,浏览该网站似乎并不存在。
尽管可能不相关,但值得一提的是线
[self.mailButton release];
在您的dealloc
方法中。 这可能不是问题,因为它在您的dealloc方法中,但是如果您要使用属性访问器,则应保留并释放它。 如果在其他任何地方都有该行,则如果重新分配了mailButton属性,则会在以后导致EXC_BAD_ACCESS。 那是因为:
self.mailButton = THING; // retain count +1
[self.mailButton release]; // retain count -1
self.mailButton = OTHER; // EXC_BAD_ACCESS!
这是因为第三行实际上是对setMailButton:
的调用,该调用在内部调用[THING release]
,但是由于您已经释放了它,所以您现在已经失去了对setMailButton:
/ release调用的平衡,因此无论是后来还是以后(如果有人保留了它) )release将在无效对象上被调用,并且您的程序进入kablooey。
修复了该错误。 由于缺少保留,套接字被取消分配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.