Как мне объявить оператор только для отладки - PullRequest
37 голосов
/ 26 января 2009

В C # я могу использовать следующий код, чтобы иметь код, который выполняется только во время отладочной сборки, как я могу сделать то же самое в XCode?

if #DEBUG
{
    // etc etc
}

Ответы [ 4 ]

65 голосов
/ 26 января 2009

Вы можете использовать

#ifdef DEBUG
    ....
#endif

Вам нужно будет добавить DEBUG=1 к определениям символов препроцессора проекта в настройках конфигурации отладки, поскольку это не делается автоматически для Xcode.

Лично я предпочитаю делать DEBUG=1 вместо проверки на NDEBUG=0, поскольку последняя подразумевает, что конфигурация сборки по умолчанию содержит отладочную информацию, которую затем необходимо явно отключить, тогда как "DEBUG = 1" подразумевает поворот на только код отладки.

43 голосов
/ 26 января 2009

Символ NDEBUG должен быть определен для вас уже в сборках режима релиза

#ifndef NDEBUG
/* Debug only code */    
#endif 

Используя NDEBUG, вы просто избегаете необходимости указывать аргумент -D DEBUG для компилятора самостоятельно для сборок отладки

14 голосов
/ 19 февраля 2014

DEBUG теперь определен в «режиме отладки» по умолчанию в Project / Preprocessor Macros. Поэтому тестирование всегда работает, если у вас нет очень старого проекта.

Однако я ненавижу тот факт, что он портит код и не особенно компактен. Вот почему я использую другой макрос, который облегчает жизнь.

#ifdef DEBUG
#define DEBUGMODE YES
#else
#define DEBUGMODE NO
#endif

Таким образом, тестирование значения DEBUGMODE намного более компактно:

if (DEBUGMODE) {
//do this
} else {
//do that
}

Мой любимый:

NSTimeInterval updateInterval = DEBUGMODE?60:3600; 
5 голосов
/ 26 января 2009

Существует очень полезный метод отладки: Техническое примечание TN2124 Mac OS X Магия отладки http://developer.apple.com/technotes/tn2004/tn2124.html#SECENV, который содержит много полезного для отладки ваших приложений.

Tony

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...