c++ - 使用 boost::log API 时,有没有办法从发布二进制文件中删除文本文字?

标签 c++ boost

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线程建议,但文字最终出现在发布的可执行文件中(这是有道理的,据我预测结果)。

最佳答案

这对我有用,但它需要重写日志语句:

#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);

关于c++ - 使用 boost::log API 时,有没有办法从发布二进制文件中删除文本文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23922230/

相关文章:

c++ - 从子状态机延迟事件

c++ - Visual Studio C++ 2012 和 2017 在随机数生成中显示不同的行为?

c++ - 为自己的类型扩展 boost property tree get

c++ - 将 boost::asio 中的异步文件 io 扩展到 Mac OS X

c++ - 如何在 C++ 的私有(private)结构中获取/设置值?

c++ - 我正在尝试创建一个类 vector ,然后用 for 循环命名每个类

c++ - 流不按预期工作

c++ - 防止 Boost Spirit Symbol 解析器过早接受关键字

c++ - 为什么使用 Boost.Intrusive 容器存储多态对象很好?

c++ - Boost 或 VC10 的 TR1 - 哪个更好?