Тони

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

if #DEBUG
{
    // etc etc
}

Ответы на вопрос(4)

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

#ifdef DEBUG
    ....
#endif

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

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

 Alper26 апр. 2012 г., 14:15
Я обнаружил, что в моем проекте XCode это уже было предопределено.
 Matt Gibson22 нояб. 2012 г., 11:56
Да, похоже, что это определено по умолчанию сейчас - я только что создал стандартный проект iOS в XCode и получил предустановку DEBUG = 1 в разделе Preprocessor Macros / Debug в настройках сборки проекта.

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

Тони

processor Macros. Поэтому тестирование всегда работает, если у вас нет очень старого проекта.

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

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

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

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

Мой любимый:

NSTimeInterval updateInterval = DEBUGMODE?60:3600; 
Решение Вопроса

а

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

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

 ShuggyCoUk26 янв. 2009 г., 13:44
Мои извинения XCode не определяет его по умолчанию. вот где вы должны пойти, чтобы добавить его в:developer.apple.com/tools/xcode/xcodebuildsettings.html
 ShuggyCoUk26 янв. 2009 г., 13:37
Я понимаю, что многие люди предпочитают это, но NDEBUG для выпуска является стандартом Си. Придерживаясь этого, вы избавите себя от неприятностей. NEDBUG также должен быть определен для вас уже в сборках выпуска Xcode
 Alnitak26 янв. 2009 г., 13:10
но ты все равно долженДобавлять NDEBUG в настройках компилятора для использования режима релиза. Многие программисты предпочитают #ifdef DEBUG двойному негативу, который находится в #ifndef NDEBUG
 Alnitak26 янв. 2009 г., 15:29
постскриптум Что если он хочет отделить поведение assert () от своего кода отладки?
 ShuggyCoUk26 янв. 2009 г., 16:02
Абсолютно, если он желает взять контроль над собой, ему нужно будет принять осознанное решение и определить соответственно. Похоже, это является обоснованием для разработчиков XCode в том, что они не предоставляют некоторые определения по умолчанию, как VS и другие. Мне просто кажется, что он должен начать со стандарта.

Ваш ответ на вопрос