Boost 1.55 предоставляет API журналирования с использованием оператора вставки потоков C ++ (иначе называемого оператором сдвига влево).

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

Например, при использовании MFC макрос TRACE оказывается пустой строкой в ​​конфигурации выпуска.

Используя TRACE (или любую подобную макрос-функцию):

TRACE("This text literal shall only be found in debug configuration");

Использование Boost API:

LOG_DEBUG << "This text literal shall only be found in debug configuration";

Я протестировал (используя Visual Studio 2010, включена полная оптимизация компилятора (/ Ox)) Как удалить операторы отладки журнала из предложения потока программы, но литерал попадает в исполняемый файл в выпуске (что имеет смысл, насколько я мог предсказать результат).

4
Maestro 29 Май 2014 в 01:32

2 ответа

Лучший ответ

Это работает для меня, но требует переписывания операторов журнала:

#ifdef _DEBUG
#define LOG(arg) LOG_DEBUG << arg
#else
#define LOG(arg)
#endif

Линия

LOG("This text literal shall only be found in debug configuration");

Не будет предварительно обработан до нуля для сборки без отладки. Потоковая передача тоже работает:

LOG("Answer = " << 42);
0
alain 28 Май 2014 в 22:17