반응형
Cocoa의 콘솔 / 로그에 스택 추적을 어떻게 인쇄합니까?
어설 션 실패 또는 포착되지 않은 예외와 같은 특정 지점에서 통화 추적을 기록하고 싶습니다.
NSLog(@"%@",[NSThread callStackSymbols]);
이 코드는 모든 스레드에서 작동합니다.
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;
}
}
Cocoa는 미처리 메모리 예외 일 뿐이지 만 캐치되지 않은 예외에 대한 스택 추적을 콘솔에 이미 기록합니다. 콘솔에서 기호 정보를 원한다면 Apple의 샘플 코드가 있습니다.
코드의 임의 지점에서 스택 추적을 생성하려면 (그리고 Leopard를 사용하는 경우) backtrace 매뉴얼 페이지를 참조하십시오. Leopard 이전에는 실제로 호출 스택 자체를 파헤쳐 야했습니다.
이것은 당신에게 무엇을 해야할지 거의 알려줍니다.
기본적으로 다음과 같이 로깅하도록 애플리케이션 예외 처리를 설정해야합니다.
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
예외의 경우 예외 userInfo 사전의 NSStackTraceKey 멤버를 사용하여이를 수행 할 수 있습니다. Apple 웹 사이트의 예외 에 대한 프로그램 응답 제어를 참조하십시오 .
이 방법으로 신속하게 인쇄하십시오.
print("stack trace:\(Thread.callStackSymbols)")
반응형
'IT' 카테고리의 다른 글
SQL Server의 동적 SELECT TOP @var (0) | 2020.03.19 |
---|---|
json POST 데이터를 웹 API 메소드에 객체로 전달하는 방법은 무엇입니까? (0) | 2020.03.19 |
UTC / GMT 시간을 현지 시간으로 변환 (0) | 2020.03.19 |
인라인 onclick 속성으로 이벤트 전파를 중지하는 방법은 무엇입니까? (0) | 2020.03.19 |
Perl에서 루프를 해제하려면 어떻게해야합니까? (0) | 2020.03.19 |