boost 1.55使用C ++流插入运算符(另外命名为左移运算符)提供日志记录API。
虽然语法很方便,但我想不出从可执行文件中丢弃调试文本文字的方法。
例如,使用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)启用了How to remove log debugging statements from a program线程建议但文字最终在发布中的可执行文件中(这是有意义的,据我所知,结果)。
答案 0 :(得分:0)
这对我有用,但它需要重写日志语句:
#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);
答案 1 :(得分:0)
empty operator<<
trick在Visual Studio 2008上对我有用。关键似乎不是编译器优化标志,而是链接器优化标志。当我链接/OPT:REF
(消除未引用数据)时,字符串文字不在可执行文件中。
有一点令人困惑的是默认值:
如果指定了/ DEBUG,则/ OPT的默认值为NOREF(否则为 是REF),所有功能都保存在图像中。
有人可能认为这意味着默认情况下Release版本会有/OPT:REF
,因此不需要指定标志。但是,在我的Visual Studio上,似乎默认情况下Release版本已启用/DEBUG
(这可能很有用但有点违反直觉)所以如果你必须将/OPT:REF
添加到Release版本标志中想要那种行为。