Visual C ++ условная отладка

Я пытаюсь настроить проект с условной отладкой. Я хочу иметь макрос debug который #defined для некоторого вида printf / cout / что угодно, когда я работаю в режиме отладки и #defined для пустого оператора при работе в производственном режиме. Как я могу это сделать:

Я пробовал использовать макрос _DEBUG но я всегда вижу печать своих аргументов независимо от того, в каком режиме я работаю:

struct debugger{template<typename T> debugger& operator ,(const T& v){std::cerr<<v<<" ";return *this;}}dbg;
#if _DEBUG
#define debug(...) {dbg,__VA_ARGS__;std::cerr<<std::endl;}
#else
#define debug(...) // Just strip off all debug tokens
#endif

В моем основном:

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int a=1,b=2,c=3;
debug(a,b,c);
cin>>a;
}

Если это поможет, я использую Visual Studio 2012

2

Решение

Код в ваших примерах правильный. Проблема в том, где определение _DEBUG идет от. В правильной настройке он должен прийти / не исходить из вашего проекта MSVC и из ниоткуда. В этом случае в зависимости от типа сборки у вас будет то, что вы ожидаете.

Скорее всего, он определен где-то в вашем собственном коде или в одном из заголовков, которые вы включаете.

В вашем сообщении недостаточно информации, чтобы определить истинное происхождение _DEBUG,

В режиме отладки определение из MSVC будет выглядеть так:

#define _DEBUG

Это значит, что даже в DEBUG build вы ничего не увидите. Когда вы видите результат, это означает, что defn присутствует и он не пустой. Это определение не из MSVC.

0

Другие решения

Попробуй это

struct debugger{template<typename T> debugger& operator ,(const T& v){std::cerr<<v<<" ";return *this;}}dbg;
#if _DEBUG
#define debug(...) {dbg,__VA_ARGS__;std::cerr<<std::endl;}
#else
#define debug
#endif
0

По вопросам рекламы [email protected]