gpt4 book ai didi

c# - TraceListener,在断言失败时抛出异常

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:24 26 4
gpt4 key购买 nike

我对 DefaultTraceListener(这是唯一的跟踪监听器,如果没有在 app.config 中覆盖的话)的问题是,如果 AssertUiEnabledfalse(即在 ASP.NET 中)它在失败的断言(调用 Trace.Assert(false))时写入一条消息作为 OutputDebugString但继续执行.

所以我使用了 TraceListener 的以下子类,它会抛出异常。我使用

激活它
TraceListenerWhichThrowsExceptionOnFail.InsertAsFirstTraceListener(Trace.Listeners);

Application_Init 中。

现在,在 Application_Error 事件中,我可以使用完整的堆栈跟踪记录异常(作为任何异常),包括 Trace.Assert(false) 的调用。

public class TraceListenerWhichThrowsExceptionOnFail : TraceListener
{
public static void InsertAsFirstTraceListener(TraceListenerCollection traceListeners)
{
traceListeners.Insert(0, new TraceListenerWhichThrowsExceptionOnFail());
}

public override void Fail(string message, string detailMessage)
{
message = string.IsNullOrEmpty(detailMessage) ? message : message + ", Detail message: " + detailMessage;

throw new ApplicationException("Trace assertion failed" +
(string.IsNullOrEmpty(message) ? "" : ": " + message) + ".");
}

public override void Write(string message)
{
// NOP
}

public override void WriteLine(string message)
{
// NOP
}
}

现在我的问题是:有人认为这种方法有问题吗?

最佳答案

我会说 Trace.Assert 中的异常是个坏主意(不看你的代码)。

Trace.XXXX 方法通常用于跟踪东西。如果 future 的读者(包括您)得知 Trace.Assert 实际上会抛出异常,那将是非常令人惊讶的。

看到 Trace.Assert(甚至 Fail)抛出异常更令人惊讶。 Assert 的目的是帮助提前识别问题,而不是杀死应用程序。

我建议提出您的自定义方法,在名称中清楚地显示其行为,而不是提出现有方法的意外行为。

关于c# - TraceListener,在断言失败时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15146950/

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