[英]How to get rid of std::cout quickly
我继承了一个很大的代码库,其中std::cout
经常用于打印调试信息。 代码中没有真正的调试/日志功能,由于这是一个短暂的任务(错误修正),因此现在实现调试/日志功能是不可能的。
这确实使我感到困扰,该程序输出的文本数量很大,至少在我不得不对其进行处理之前,我想暂时禁用所有打印输出。
我现在看到两种解决方案:
std::couts
跨越多行,所以我必须手动找到它们 operator <<
的构造替换std::cout
所有出现,然后简单地吞下所有输出 您对此问题有更好的解决方案吗?
您可以使用以下方式以编程方式重定向标准输出
FILE origSTDOUT = *stdout;
static FILE* nul = fopen( "NUL", "w" );
*stdout = *nul;
setvbuf( stdout, NULL, _IONBF, 0 );
从您想抑制输出并使用诸如
*stdout = origSTDOUT;
恢复它。
如果要从应用程序内部执行此操作,则可以更改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”的部分 。
不用搞乱应用程序本身,您可以使用外壳程序提供的功能,只需将输出到STDOUT的重定向到/dev/null
或等效文件(有效地将其丢弃)
* NIX
./binary > /dev/null # send STDOUT to /dev/null
视窗
./binary > NUL # send STDOUT to NUL
这个:
std::cout.rdbuf(nulllptr);
禁用任何输出。 只需将其添加到main。
您可以将标准输出重定向到空文件。 因此,输出变得不可见。 在Unix系统中,您可以像在控制台上那样运行程序: program_name > /dev/null
。 对于Windows,您可以尝试program_name > nul
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.