我继承了一个大型代码库,其中std::cout
经常用于打印调试信息。代码中没有真正的调试/日志功能,因为这将是一个短暂的任务(bugfix),现在实现调试/日志功能是不可能的。
这个程序输出的文本数量让我感到困扰,至少在我必须处理它之前,我想暂时禁用所有打印输出。
我现在看到两种解决方案:
std::couts
跨越多行,所以我必须手动找到它们std::cout
的构造替换operator <<
的所有出现并简单地吞下所有输出你有解决这个问题的更好方法吗?
答案 0 :(得分:2)
您可以使用
之类的方式以编程方式重定向stdoutFILE origSTDOUT = *stdout;
static FILE* nul = fopen( "NUL", "w" );
*stdout = *nul;
setvbuf( stdout, NULL, _IONBF, 0 );
从您想要抑制输出和恢复的点
*stdout = origSTDOUT;
恢复它。
答案 1 :(得分:2)
如果您想在应用程序本身内执行此操作,则可以更改std::cout
的基础std::streambuf
,以便任何输出有效地在其他位置结束。
示例强>
std::ostringstream buffer;
std::streambuf * cout_streambuf = std::cout.rdbuf (buffer.rdbuf ()); // (A)
std::cout << "hello world\n"; // (B)
std::cout.rdbuf (orig_cout_streambuf); // (C)
std::cout
的基础 streambuf 设置为buffer
,并返回旧 streambuf (使用此值有效初始化 cout_streambuf )。std::ostreamstream
注意:(B)表示您希望拥有“重定向的std :: cout”的应用程序部分< / em>的
您可以使用shell提供的工具,而不是乱搞应用程序本身,只需将输出重定向到 STDOUT 到/dev/null
或等效(有效地丢弃它)
<子>
的 * NIX 强>
子>
./binary > /dev/null # send STDOUT to /dev/null
<子>
的 WINDOWS 强>
子>
./binary > NUL # send STDOUT to NUL
答案 2 :(得分:1)
此:
std::cout.rdbuf(nulllptr);
禁用任何输出。只需将其添加到main。
答案 3 :(得分:0)
您可以将标准输出重定向到空文件。因此,输出变得不可见。在Unix系统中,您可以在控制台上运行如下所示的程序:program_name > /dev/null
。对于Windows,您可以尝试program_name > nul