답변:
n13의 대답이 제대로 작동하지 않았습니다.이 문제를 해결하기 위해 약간 수정했습니다.
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
int retval;
@try{
retval = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
@catch (NSException *exception)
{
NSLog(@"Gosh!!! %@", [exception callStackSymbols]);
@throw;
}
return retval;
}
}
NSLog(@"[Error] - %@ %@", exception.name, exception.reason);
당신이 너무 실제 예외를 원하는 경우
Cocoa는 미처리 예외에 대한 스택 추적을 단지 원시 메모리 주소이지만 콘솔에 이미 기록합니다. 콘솔에서 기호 정보를 원한다면 Apple의 샘플 코드가 있습니다.
코드의 임의 지점에서 스택 추적을 생성하려면 (그리고 Leopard를 사용하는 경우) backtrace 매뉴얼 페이지를 참조하십시오. Leopard 이전에는 실제로 호출 스택 자체를 파헤쳐 야했습니다.
이것은 당신에게 무엇을 해야할지 거의 알려줍니다.
기본적으로 다음과 같이 로깅하도록 애플리케이션 예외 처리를 설정해야합니다.
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
예외의 경우 예외 userInfo 사전의 NSStackTraceKey 멤버를 사용하여이를 수행 할 수 있습니다. Apple 웹 사이트의 예외 에 대한 프로그램 응답 제어를 참조하십시오 .
backtrace
및backtrace_symbols
기능을 사용하십시오 . backtrace (3) 맨 페이지를 참조하십시오.