UFO ET IT

DEBUG 모드에서 NSLog 활성화 및 비활성화

ufoet 2021. 1. 10. 17:49
반응형

DEBUG 모드에서 NSLog 활성화 및 비활성화


디버그 중일 때 NSLog를 활성화하고 그렇지 않으면 비활성화하고 싶습니다. 아주 간단한 것은 :

#ifdef DEBUG
NSLog(@"My log");
#endif

그러나 모든이 #ifdef#endif나는 다른 것을 시도 borring입니다 ... :( 그래서 : (넣어 좋은 장소입니다 .PCH를)

#ifdef DEBUG
#   define NSLog(text) NSLog(text);
#else 
#   define NSLog(text) 
#endif

이것은 매우 잘 작동합니다 (재귀 적이 지 않음). 그러나 문제는 NSLog에 무한한 인수가 있다는 것입니다.

void NSLog(NSString *format, ...)

전 처리기 모드에서 작동하도록이 문제를 어떻게 해결합니까?

-- 편집하다 --

이 코드는 NSLog를 향상시킵니다.

#ifdef DEBUG
    #define NSLog(FORMAT, ...) fprintf(stderr,"%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
    #define NSLog(...)
#endif

이것은 트릭을 수행해야합니다.

 #ifdef DEBUG
 #   define NSLog(...) NSLog(__VA_ARGS__)
 #else 
 #   define NSLog(...) (void)0
 #endif

이것은 조금 더 짧으며 장치를 사용할 때 NSLog를 비활성화합니다. 게임을 작성하는 경우 NSLogs를 자주 보내면 FPS를 60에서 20으로 줄일 수 있습니다.

#if !defined(DEBUG) || !(TARGET_IPHONE_SIMULATOR)
    #define NSLog(...)
#endif

위의 모든 답변이 정확합니다. 다음과 같은 방법으로도 제안 할 수 있습니다. 대괄호가없는 if 문이 있다고 가정합니다.

if(x==5)
NSLog("x is 5");

NSLog를 문없이 대체하면 어떻게 될까요? 따라서 간단히 빈 루프로 바꿀 수 있습니다.

#ifdef DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#else
#define NSLog(...) do {} while (0)
#endif

이 문은 빈 루프를 한 번 실행합니다. 이렇게하면 모든 라이브 코드에서 NSLog가 안전하게 제거됩니다.


#ifndef Debug
    #define Debug 1
#endif

#if Debug
#   define DebugLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define DebugLog(...)
#endif

로그를 활성화하려면 Debug를 1로 설정하고 비활성화하려면 0으로 설정합니다.


여기에 좋은 트릭이 있습니다 ...

#define EXTRANSLog if([[NSUserDefaults standardUserDefaults] boolForKey:@"SomeFancyKey"] == YES) NSLog 

교체

NSLog(@"????");

EXTRANSLog(@"????");

이 예제에서는 NSUser 키를 생성하고 BOOL을 YES로 설정하고, 스위치 등을 사용하여 키를 NO로 변경하거나 콘솔 디버거를 통해 EXTRANSLog를보고 싶지 않은 경우 모두 제거합니다.

문제를 해결할 때 이것을 사용하고 과도한 로그가 모두 표시되는 것을 원하지 않습니다. SomeFancyKey == YES 인 경우에만.

이것은

#define NSLog if(1) NSLog

여기서 1은 예이며 NSLog를 표시하고 0은 아니오입니다.

참조 URL : https://stackoverflow.com/questions/6552197/enable-and-disable-nslog-in-debug-mode

반응형