如何在C++中重定向断言输出



当参数为false时,是否可以将断言输出重定向到文件?我知道它的默认行为是向 stderr 写入消息,但以下内容没有像我预期的那样工作:

#include <iostream>
#include <assert>
#include <fstream>
using namespace std;
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
   ofstream ofs;
   ofs.open("test.txt", ios_base::out);
   ofs << "A";
   cerr << "B";
   cerr.rdbuf(ofs.rdbuf());
   cerr << "C";
   assert(1 == 2);
   return 0;
}
//---------------------------------------------------------------------------

测试结果.txt

AC

并导致标准输出:

B
Assertion failed: 1 == 2, file C:xxxUnit1.cpp, line 14
Abnormal program termination

我期待在 stdout 中打印的这 2 行在测试.txt文件中。我也尝试过使用,而不是...

cerr.rdbuf(ofs.rdbuf());

以下内容:

freopen("test.txt", "a", stderr);

但它并没有奏效。

我还看到一些帖子(如C:如何将stderr从System-command重定向到stdout或file?)建议dup2重定向流,例如在unistd.h中定义的stderr。但是我在Windows上使用C++Builder,它似乎不可用。

您可以在程序开始时将所有输出重定向到 stderr,或任何其他标准文件句柄重定向到文件。

   freopen( "error.log","w",stderr);

在这里阅读有关此内容的信息:

http://support.microsoft.com/kb/58667

@edit:如果输出转到标准输出,那么您需要执行以下操作:

   freopen( "error.log","w",stdout );

如果要追加而不覆盖错误.log:

   freopen( "error.log","aw",stdout );

相关内容

  • 没有找到相关文章

最新更新