3

C# プログラムによって呼び出される C DLL があります。DLL はassert()ステートメントでいっぱいですが、どれも画面に表示されるほど積極的ではありません。これは、アサート出力が STDERR (または STDOUT) に書き込まれるためだと理解しています。

出力がファイルにリダイレクトされるように、何らかの形で assert マクロにプラグインする方法はありますか?

4

1 に答える 1

0

たぶん、アサーションはすべて渡された 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された場合、適切に閉じられず、ストリームはフラッシュされず、何もログに記録されません。

于 2012-10-02T06:56:20.833 に答える