当从命令行提供参数时,我想让我的应用程序将所有 Debug 和 Trace 输出重定向到文件和 Console.Out。对于普通Debug.WriteLine()
消息,这个已经有效:
TextWriterTraceListener[] listeners = new TextWriterTraceListener[] {
new TextWriterTraceListener(Console.Out),
new TextWriterTraceListener(debugFile),
};
Debug.Listeners.AddRange(listeners);
但它不为Debug.Assert(condition, "message")
。
如何Debug.Assert()
像对输出一样重定向Debug.WriteLine()
输出?
编辑:
我添加了 TextWriterTraceListener 的子类,以便将断言失败消息发送到控制台或调试文件:
// used to redirect assert debug messages
private class AssertTraceListener : TextWriterTraceListener
{
public AssertTraceListener(TextWriter w) : base(w) {}
public AssertTraceListener(String s) : base(s) {}
public override void Fail(string message)
{
// uncomment if you want the modal dialog
//base.Fail(message);
WriteLine(message);
}
}
我现在这样称呼他们:
TextWriterTraceListener[] twlisteners = new TextWriterTraceListener[] {
new TextWriterTraceListener(Console.Out),
new TextWriterTraceListener(debugFile)
};
AssertTraceListener[] listeners = new AssertTraceListener[] {
new AssertTraceListener(Console.Out),
new AssertTraceListener(debugFile)
};
Debug.Listeners.Clear();
Debug.Listeners.AddRange(listeners);
Debug.Listeners.AddRange(twlisteners);
debugFile
包含有效路径,但我的任何消息(既不是 Debug.WriteLine 消息也不是断言消息)都不会进入我的调试文件。我错过了什么?