调试时触发或不异常
本文关键字:异常 调试 | 更新日期: 2023-09-27 18:35:11
我有一个类调度程序,其方法如下:
public class Dispatcher : IDispatcher {
public void Send(Order order) {
Type type = typeof(IOrderHandler<>).MakeGenericType(order.GetType());
IOrderHandler handler = (IOrderHandler)ObjectFactory.GetInstance(type);
try {
handler.Handle(order);
} catch (Exception exception) {
ILogger logger = ObjectFactory.GetInstance<ILogger>();
logger.Send(exception);
}
}
} // Send
我正在处理订单并捕获异常...
当我调试时,我仍然想触发异常。
我该怎么做?
谢谢米格尔
只需将这一行添加到您的 catch 块中:
if (System.Diagnostics.Debugger.IsAttached) throw;
您可以在 catch 块中添加以下内容:
#if DEBUG
throw;
#endif
因此,您的代码将如下所示:
try
{
handler.Handle(order);
}
catch (Exception exception)
{
ILogger logger = ObjectFactory.GetInstance<ILogger>();
logger.Send(exception);
#if DEBUG
throw;
#endif
}
如果您希望在Release
配置调试期间在 IDE 中收到异常通知,请使用 @Hans Passant 的答案,因为这将让您了解Release
配置和Debug
配置的异常。
好吧,基于您希望仍然抛出异常的事实,但只有在调试时,您可以这样做:
- 打开
Debug
菜单,然后选择Exceptions
。 - 对话框加载时,勾选
Thrown
标题下Common Language Runtime Exceptions
旁边的复选框。
这将导致您获得第一次机会例外。这意味着在调试时,IDE 将通知您,并且您将有机会在继续处理之前处理它。这实际上可以让您在它被记录之前看到它。
更重要的是,您实际上可以使用此方法取消选择您不需要的异常,因为它们按Common Language Runtime Exceptions
分组下的异常类型进行细分。
更多详情...
转到调试
>异常并检查 CLR 异常中的"抛出",这将带您到那里。 或者,在 catch 块上放置一个断点。