Включение и отключение NSLog в режиме отладки
Я хочу включить NSLog, когда я нахожусь в debug и отключить его в противном случае. Очень простая вещь:
#ifdef DEBUG
NSLog(@"My log");
#endif
но все это #ifdef и #endif скучная... : (Поэтому я стараюсь другое: (.pch-хорошее место, чтобы положить его)
#ifdef DEBUG
# define NSLog(text) NSLog(text);
#else
# define NSLog(text)
#endif
эта работа очень хорошо (не рекурсивно). Но проблема в том, что NSLog бесконечные аргументы.
void NSLog(NSString *format, ...)
как я решаю это, чтобы работать в режиме препроцессора?
-- Edit --
этот код делает ваш NSLog лучше:
#ifdef DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"%sn", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define NSLog(...)
#endif
5 ответов:
Это должно сделать трюк:
#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 = = да.
это то же самое, что
#define NSLog if(1) NSLogгде 1-Да, показать NSLog, а 0-Нет.
Comments