我有一个由 C# 程序调用的 C DLL。DLL 中充满了assert()
陈述,但没有一个足够自信,无法出现在我的屏幕上。我理解这是因为断言输出被写入 STDERR(或者可能是 STDOUT)。
有没有办法以某种方式插入断言宏,以便将输出重定向到文件?
也许断言驻留在 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
不会正确关闭,流将不会被刷新并且不会记录任何内容。