调试时出现火灾或非异常

时间:2013-10-11 17:51:20

标签: c#

我有一个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 个答案:

答案 0 :(得分:5)

只需将此行添加到catch块:

 if (System.Diagnostics.Debugger.IsAttached) throw;

答案 1 :(得分: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的answer,因为这样可以让您了解Release和{的异常{1}}配置。

答案 2 :(得分:2)

好吧,基于您仍然要抛出异常的事实,但只有在调试时,您才能执行此操作:

  1. 打开Debug菜单,然后选择Exceptions
  2. 加载对话框时,勾选Common Language Runtime Exceptions标题下Thrown旁边的复选框。
  3. 这将导致您获得第一次机会异常。这意味着IDE会在调试时通知您,并且在处理继续之前您将有机会处理它。这实际上会让你在它被记录之前看到它。

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

    More detail...

答案 3 :(得分:0)

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