C# プログラムによって呼び出される C DLL があります。DLL はassert()
ステートメントでいっぱいですが、どれも画面に表示されるほど積極的ではありません。これは、アサート出力が STDERR (または STDOUT) に書き込まれるためだと理解しています。
出力がファイルにリダイレクトされるように、何らかの形で assert マクロにプラグインする方法はありますか?
たぶん、アサーションはすべて渡された dll に存在しますか?
私はMonoで以下をテストしました
#include <assert.h>
void foo()
{
assert(1==2);
}
//~~~~~
[DllImport("mylib.so")]
extern static void foo();
public static void Main (string[] args)
{
foo();
}
アサーションが失敗した直後に、プログラムは中止されました。
stderr をリダイレクトしたいだけなら、Console.SetError(new StreamWriter("err.log"));...;Console.Error.Close()
それで十分です。ただし、プログラムが途中で中止Console.Error
された場合、適切に閉じられず、ストリームはフラッシュされず、何もログに記録されません。