用c ++打开/关闭我自己的日志(cout)打印 - 怎么做?任何特殊选择?

时间:2014-01-28 20:32:00

标签: c++ debugging logging cout

我使用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 ++中完成它?

4 个答案:

答案 0 :(得分:3)

使用调试宏保护它:

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

答案 1 :(得分:2)

使用

等宏
#define COUT if (0) cout

并替换每次出现cout

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

答案 2 :(得分:1)

对于一个严肃的应用程序,我们将设置一个日志记录框架(记录器可以有不同的日志记录级别,如果消息的级别大于或等于记录器的级别,则只输出一些内容)。

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

快速解决方案:

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

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

VC已经定义了_DEBUGDefined when you compile with /LDd, /MDd, and /MTd.)。请参阅:http://msdn.microsoft.com/en-us/library/b0084kay.aspx

答案 3 :(得分:0)


我建议使用Boost日志记录:

  

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

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