如何快速摆脱std :: cout

时间:2015-03-16 08:34:31

标签: c++ debugging cout

我继承了一个大型代码库,其中std::cout经常用于打印调试信息。代码中没有真正的调试/日志功能,因为这将是一个短暂的任务(bugfix),现在实现调试/日志功能是不可能的。

这个程序输出的文本数量让我感到困扰,至少在我必须处理它之前,我想暂时禁用所有打印输出。

我现在看到两种解决方案:

  1. 只是评论出来......这是很多工作,因为一些std::couts跨越多行,所以我必须手动找到它们
  2. 使用具有自己的std::cout的构造替换operator <<的所有出现并简单地吞下所有输出
  3. 你有解决这个问题的更好方法吗?

4 个答案:

答案 0 :(得分:2)

您可以使用

之类的方式以编程方式重定向stdout
FILE 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)
  • (A)会将std::cout的基础 streambuf 设置为buffer,并返回旧 streambuf (使用此值有效初始化 cout_streambuf )。
  • (B)写一些数据,有效地让它最终出现在std::ostreamstream
  • (C)重置基础 streambuf ,恢复到之前的状态


  

注意(B)表示您希望拥有“重定向的std :: cout”的应用程序部分< / em>的



使用shell重定向

您可以使用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