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
            }

構成でのデバッグ中に IDE で例外通知が必要な場合は、Release@Hans Passant のanswerを使用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 に答える