簡體   English   中英

調試Iphone程序收到信號:“ EXC_BAD_ACCESS”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM