パラメータが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;
}
//---------------------------------------------------------------------------
test.txtの結果:
AC
そして結果は stdout になります:
B
Assertion failed: 1 == 2, file C:\xxx\Unit1.cpp, line 14
Abnormal program termination
ただし、標準出力に出力されたこれらの最後の2行はtest.txtファイルにあると予想していました。私も試してみましたが、代わりに...
cerr.rdbuf(ofs.rdbuf());
以下:
freopen("test.txt", "a", stderr);
しかし、それはうまくいきませんでした。
unistd.hで定義されている stderr などのストリームをリダイレクトするようにdup2を提案するいくつかの投稿 ( C: how to redirect stderr from System-command to stdout or file?など) も見ました。しかし、私は Windows で C++Builder を使用していますが、利用できないようです。