반응형
스택 트레이스를 코코아 콘솔/로그로 출력하려면 어떻게 해야 합니까?
실패한 어설션이나 포착되지 않은 예외와 같은 특정 포인트의 콜 트레이스를 기록하려고 합니다.
이 코드는 모든 스레드에서 작동합니다.
NSLog(@"%@", NSThread.callStackSymbols);
콜 스택 기호를 포함하는 배열을 반환합니다.각 요소는
NSString
에 의해 결정되는 형식의 값을 가진 오브젝트backtrace_symbols()
기능.
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 man 페이지를 참조해 주세요.Leopard 이전에는 콜 스택 자체를 조사해야 했습니다.
이것으로 무엇을 해야 할지 알 수 있습니다.
기본적으로 다음과 같이 기록할 응용 프로그램 예외 처리를 설정해야 합니다.
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
예외의 경우 예외의 userInfo 사전의 NSStackTraceKey 멤버를 사용하여 이를 수행할 수 있습니다.Apple 웹 사이트에서 예외에 대한 프로그램 응답 제어를 참조하십시오.
빠른 인쇄 방법:
print("stack trace:\(Thread.callStackSymbols)")
NSString으로 받고 싶다면.
[NSThread callStackSymbols].description
언급URL : https://stackoverflow.com/questions/220159/how-do-you-print-out-a-stack-trace-to-the-console-log-in-cocoa
반응형
'programing' 카테고리의 다른 글
NS 프리픽스는 무엇을 의미합니까? (0) | 2023.04.15 |
---|---|
rm이 파일을 찾을 수 없음을 보고하지 않도록 하려면 어떻게 해야 합니까? (0) | 2023.04.15 |
VBA를 사용하여 현재 연도를 얻는 방법 (0) | 2023.04.15 |
Swift @autoclosure 사용방법 (0) | 2023.04.15 |
Swift 딕셔너리에 키가 포함되어 있는지 확인하고 해당 값 중 하나를 가져옵니다. (0) | 2023.04.15 |