2009-07-14 32 views
9

Tôi đang sử dụng GTMStackTrace từ http://code.google.com/p/google-toolbox-for-mac.NSSetUncaughtExceptionHandler không phát hiện tất cả lỗi trên iPhone

Tôi cần một cách để kiểm tra người dùng cuối gửi lỗi cho tôi khi ứng dụng gặp sự cố. Tôi biết cách gửi dữ liệu đến trang web của mình nhưng vấn đề là cách bắt tất cả các lỗi không được xử lý.

tôi có mã này:

void exceptionHandler(NSException *exception) { 
    NSLog(@"%@", [exception reason]); 
    NSLog(@"%@", [exception userInfo]); 
    NSLog(@"%@", GTMStackTraceFromException(exception)); 

    UIAlertView *alert = [[UIAlertView alloc] 
          initWithTitle:NSLocalizedString(@"Error unexpected",@"Info: Can't save record") 
          message:GTMStackTraceFromException(exception) delegate:nil 
          cancelButtonTitle:NSLocalizedString(@"Ok",@"Button: Ok") otherButtonTitles:nil]; 
    [alert show]; 
    [alert release];  
} 

int main(int argc, char *argv[]) { 
    //For crash report.. 
    NSSetUncaughtExceptionHandler(&exceptionHandler); 
    //Normal code... 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

Tuy nhiên, điều không bắt rất nhiều lỗi, như một thông cáo xấu, một BAD ACCESS, vv, và App biến mất. Tôi có 2 vấn đề mà không rõ tại sao lại vui vẻ và người dùng cuối không biết phải nói gì.

(Ví dụ phát hành gấp đôi var cùng không bắt)

Vì vậy, làm thế nào tôi nhận được tất cả những gì lỗi pesky để người dùng cuối đơn giản gửi cho tôi báo cáo sự cố?

+0

Ngoài ra, là có thể để có được những vết đống đầy đủ với dòng lỗi? – mamcx

+0

Bạn có thực sự có khả năng hiển thị UIAlertView đó không? Tôi không thể. Lời khuyên nào? – Mark

Trả lời

19

EXC_BAD_ACCESS không tạo ngoại lệ, nó tạo tín hiệu (SIGSEGV). Để bắt nó, bạn cần một bộ xử lý tín hiệu. Christopher Atlan đã viết nice explanation về cách xử lý cả hai loại sự cố. Hãy nhớ đọc cả part 1part 2.

1

nếu có ai vẫn còn đối phó với vấn đề này và không thể làm việc nó ra ngay cả với SIGSEGV xem bài của tôi ... EXC_BAD_ACCESS automatic handling

Các vấn đề liên quan