【问题标题】:Turn on/off my own log(cout) prints in c++ - how to do that? any special option?在 C++ 中打开/关闭我自己的日志(cout)打印 - 怎么做?有什么特别的选择吗?
【发布时间】:2014-02-20 09:03:22
【问题描述】:

我使用 cout 和 printf 进行调试。但是,当我想运行没有 cout 消息的“干净”代码时

我必须注释掉每一个。如何开启/关闭

示例:

for(int i = 0 ; i < 10 ; i++){

    cout << "=======================" <<endl ;

    for(int j = 0 ; j < 5 ; j++){
              cout << j " "  ;

              int sum = i + j ; //actual work

            }
    }

我可以用某个选项以某种方式编译它吗?像这样:g++ main.cpp -no_log 它不打印任何 couts?开发者如何在 C++ 中做到这一点?

【问题讨论】:

    标签: c++ debugging logging cout


    【解决方案1】:

    用调试宏保护它:

    #ifdef DEBUG_MODE
       cout << "whatever";
    #endif
    

    或者将它包装在一个类中,这样你就不必每次都编写宏:

    class Log
    {
    public:
        template<typename T>
        Log& operator << (const T& x)
        {
        #ifdef DEBUG_MODE
            std::cout << x;
        #endif
            return *this;
        }
    };
    

    【讨论】:

      【解决方案2】:

      使用宏如

      #define COUT if (0) cout
      

      并替换每次出现的cout。

      您可以通过将 0 更改为 1 来启用日志。如果将 0 替换为全局布尔变量的名称,您甚至可以使此设置动态(运行时)。

      【讨论】:

        【解决方案3】:

        对于一个严肃的应用程序,需要设置一个日志框架(记录器可以有不同的日志记录级别,并且只有当消息的级别大于或等于您的记录器的级别时才会输出一些内容)。

        有关日志框架的示例,请参阅:Poco Logging Framework

        快速解决方案:

        #ifdef DEBUG
        cout << "debug message" << endl;
        #endif
        

        请注意,如果在调试构建时,您必须定义 DEBUG,例如通过将 -D Debug 传递给编译器命令行选项。

        VC 已经定义了_DEBUG (Defined when you compile with /LDd, /MDd, and /MTd.)。见:http://msdn.microsoft.com/en-us/library/b0084kay.aspx

        【讨论】:

          【解决方案4】:

          我建议使用 Boost 日志记录:

          核心还提供了另一种禁用日志记录的方法。通过调用 带有布尔参数的 set_logging_enabled 可以完全禁用 或重新启用日志记录,包括应用过滤。禁用日志记录 用这种方法在应用方面可能更有利 性能优于设置始终失败的全局过滤器。

          http://boost-log.sourceforge.net/libs/log/doc/html/log/detailed.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-10-01
            • 2017-01-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-11
            • 1970-01-01
            • 2020-07-09
            相关资源
            最近更新 更多