调试时触发或不异常

本文关键字:异常 调试 | 更新日期: 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配置的异常。

好吧,基于您希望仍然抛出异常的事实,但只有在调试时,您可以这样做:

  1. 打开Debug菜单,然后选择 Exceptions
  2. 对话框加载时,勾选Thrown标题下Common Language Runtime Exceptions旁边的复选框。

这将导致您获得第一次机会例外。这意味着在调试时,IDE 将通知您,并且您将有机会在继续处理之前处理它。这实际上可以让您在它被记录之前看到它。

更重要的是,您实际上可以使用此方法取消选择您不需要的异常,因为它们按Common Language Runtime Exceptions分组下的异常类型进行细分。

更多详情...

转到调试

>异常并检查 CLR 异常中的"抛出",这将带您到那里。 或者,在 catch 块上放置一个断点。