문제

나는 다음 코드를 사용하면 캡처하는 예외에서 내 응용 프로그램:

void uncaughtExceptionHandler(NSException *exception) {
    [FlurryAPI logError:@"Uncaught" message:@"Crash!" exception:exception];
}

그 궁금지할 수 있는 pin-포인트,줄 번호 UIView, 클래스 등는 오류가 발생한다.이상적으로 나가고 싶으로 많은 자세한 정보를 얻을 수 있기 때문에 의해 캡처 FlurryAPI 분석.

FlurryAPI:http://www.flurry.com/

도움이 되었습니까?

해결책

저는 마침내 이:

void uncaughtExceptionHandler(NSException *exception) {
    NSArray *backtrace = [exception callStackSymbols];
    NSString *platform = [[UIDevice currentDevice] platform];
    NSString *version = [[UIDevice currentDevice] systemVersion];
    NSString *message = [NSString stringWithFormat:@"Device: %@. OS: %@. Backtrace:\n%@",
                         platform,
                         version,
                         backtrace];

    [FlurryAPI logError:@"Uncaught" message:message exception:exception];
}

UPDATE(에 따라@TommyG 의 코멘트는 아래):

추가 NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 의 끝에- -(BOOL)application:didFinishLaunchingWithOptions: 방법 AppDelegate.다음에 추가 위의 방법 AppDelegate 뿐만 아니라.

다른 팁

할 수 있게 활용하리컴파일러와 쓰기 매크로가 수집하는 모든 값을,예를 들어:

#define __ThrowException(name, reason, class, function, file, line, info) [NSException exceptionWithName:name reason:[NSString stringWithFormat:@"%s:%i (%@:%s) %@", file, line, class, function, reason]  userInfo:info];
#define ThrowException(name, reason, info) __ThrowException(name, reason, [self class], _cmd, __FILE__, __LINE__, info)

그러나 이 때 당신이 던지는 제외하고 내부에서는 ObjC 기능(각자 및 _cmd 는 첫 번째 매개 변수를 얻 ObjC 기능,자기는 id 는 포인트 클래스고 _cmd 을 선택할 수 있는(현재!) typecasted const char).

그러나,당신이 원하는 경우에만 이 기초를 위한 예외를 제외하고,당신은 두 가지 옵션을 사용할 수 있습니다.

  1. 랩을 수 있습니다 모든 던지는 예외에서@도()@catch()블록은 다음을 던져 새로운 사용자 지정,예외
  2. 을 얻을 스택 추적이,이것은 무엇을 조금있을 수 있습니다 더 열심히 응용 프로그램에 가능한 일관성이 없는 상태에 있고 수집할 수 없습니다 모든 값입니다.모 현재 스택 추적이 덮 훌륭한 세부 사항입니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top