Включение и отключение 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
634   5  

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

    Ничего не найдено.