gpt4 book ai didi

c# - 重定向 Debug.Assert() 输出

转载 作者:太空宇宙 更新时间:2023-11-03 13:33:58 25 4
gpt4 key购买 nike

当从命令行提供参数时,我想让我的应用程序将所有 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.WriteLine() 输出一样重定向 Debug.Assert() 的输出?

编辑:

我添加了 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 消息和断言消息)都没有转到我的 debugFile。我错过了什么?

最佳答案

如果您想抑制断言对话框,则需要清除现有的调试监听器,因为 DefaultTraceListener 负责此操作。

然后,添加您自己的 TraceListener 实现并覆盖 Fail 方法,以及您在问题中显示的 TextWriterTraceListener 实现。

为方便起见,只需继承 DefaultTraceListener 并以不调用基本实现的方式覆盖 Fail 方法。

关于c# - 重定向 Debug.Assert() 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19382975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com