0

我有一个带有方法 Send 的类 Dispatcher,如下所示:

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

我正在处理订单并捕捉异常......

当我调试时,我仍然想触发异常。

我怎样才能做到这一点?

谢谢你,米格尔

4

4 回答 4

5

只需将此行添加到您的 catch 块:

 if (System.Diagnostics.Debugger.IsAttached) throw;
于 2013-10-11T17:55:10.523 回答
4

您可以在 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 的回答,因为这会让您了解配置ReleaseDebug配置的异常。

于 2013-10-11T17:55:36.560 回答
2

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

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

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

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

更多详情...

于 2013-10-11T17:55:49.490 回答
0

转到“调试”>“异常”并检查“抛出”的 CLR 异常,这将带你到那里。或者在 catch 块上放置一个断点。

于 2013-10-11T17:54:43.187 回答