2012-02-14 2 views
0

Есть ли какие-либо функции ведения журнала в C++, которые можно включить, установив debug = True или что-то подобное, чтобы печатать отладочные сообщения в stdout?logger.debug функции в C++

+0

Хорошо, что есть [это] (http://www.cplusplus.com/reference/iostream/clog/), но он отправляется на 'stderr'. –

ответ

1

Обычный трюк выглядит следующим образом:

void writeLog(const char* message); // Define elsewhere to do your logging 

#ifdef DEBUG 
#define Log(x) writeLog(x) 
#else 
#define Log(x) 
#endif 

// Somewhere in your main code 
Log("This message is only seen if DEBUG is defined at compilation"); 
+0

Итак, согласно значению отладки, журнал будет определяться как нечто иное, не так ли? К сожалению, я немного новичок в определении типов этого типа. – Cemre

+1

Правильно. Директивы '#' являются частью препроцессора; по сути, перед компиляцией кода препроцессор будет физически переписать его. Если 'DEBUG' был определен (как правило, в качестве настройки проекта или для переключения в компилятор командной строки), тогда' Log' заменяется на 'writeLog'; если он не определен, «Журнал» заменен ничем, поэтому он ничего не делает. – Chowlett

+1

Чтобы быть действительно неудобным, стандарт определяет символ 'NDEBUG', который влияет на макрос' assert'. Поэтому, если вы хотите, чтобы ваш журнал и ваши утверждения были на одном и том же коммутаторе, вы можете использовать это, иначе вы можете добавить код для определения 'DEBUG', если' NDEBUG' является ложным или наоборот. –

0

Не автоматически. Но вы можете определять свои собственные методы выборочно.

#ifdef DEBUG 
#define DEBUG_MSG(msg) debug(msg) 
#else 
#define DEBUG_MSG(msg) 
#endif 
Смежные вопросы