我使用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 ++中完成它?
答案 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已经定义了_DEBUG
(Defined 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