3

我有一个由 C# 程序调用的 C DLL。DLL 中充满了assert()陈述,但没有一个足够自信,无法出现在我的屏幕上。我理解这是因为断言输出被写入 STDERR(或者可能是 STDOUT)。

有没有办法以某种方式插入断言宏,以便将输出重定向到文件?

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 回答