2009-07-14 14 views
9

Używam GTMStackTrace z http://code.google.com/p/google-toolbox-for-mac.NSSetUncaughtExceptionHandler nie przechwytuje wszystkich błędów na iPhonie

Potrzebuję sposobu, aby przetestować użytkownika końcowego, aby wysłać mi błędy po awarii aplikacji. Wiem, jak przesłać dane do mojej witryny, ale problem polega na tym, jak złapać wszystkie błędy, które nie zostały obsłużone.

mam ten kod:

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; 
} 

Jednak sprawa nie złowionych dużo błędów, jak zły wydaniu, złe ACCES, etc, a App znikają. Mam 2 problemy, w których nie jest jasne, dlaczego zdarzyło się, a użytkownicy końcowi nie mają pojęcia, co powiedzieć.

(na przykład uwolnienie dwa razy ta sama zmienna jest nie złapać)

Więc jak mam wszystko, co brzydkie błędy tak prostego użytkownika końcowego wyślij mi raport o awarii?

+0

Ponadto, jest możliwe, aby uzyskać pełny ślad stosu z liniami o błędach? – mamcx

+0

Czy rzeczywiście możesz wyświetlić ten UIAlertView? Nie jestem w stanie. Jakakolwiek rada? – Mark

Odpowiedz

19

EXC_BAD_ACCESS nie generuje wyjątku, generuje sygnał (SIGSEGV). Aby go złapać, potrzebujesz obsługi sygnału. Christopher Atlan napisał nice explanation, jak radzić sobie z obu rodzajów awarii. Pamiętaj, aby przeczytać zarówno part 1 i part 2.

Powiązane problemy