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

标签 c# debugging

当从命令行提供参数时,我想让我的应用程序将所有 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/

相关文章:

c# - RestSharp 是否覆盖手动设置的内容类型?

ruby - 我应该在我的 Ruby (JRuby) 代码中放入什么来打断调试器?

c# - 使用 CodeDom 生成具有值和名称的枚举

c# - 如何通过主机中的软件中止已建立的连接的消息找到 SocketException 的原因和原因?

c# - MVVM:我是否使用事件或方法调用在 ViewModel 和 Model 之间进行通信

visual-studio-2008 - 如何告诉 Visual Studio 在 Break All 时不要离开当前文件?

Python:错误的调试

c# - 如何反编译 .net framework 的 IL 代码

c# - 为 .NET 进程生成带有符号的转储文件

java - 如何调试在类加载时注入(inject) VM 的字节码?