0

私は実動コードで簡単に(try catchブロックを削除して)デバッグできるように条件付きコンパイルを使用しています。私がこれを行うのは、Visual Studioが(明らかに)スローされた例外の位置を最上位のハンドラのキャッチブロックとして表示するためです。これは残念なことに、デバッグを防止するか、ハンドラを削除するまでエラーの正確な場所を特定します。ここでtry catchの条件付きコンパイル

private void btnConnect_Click(object sender, EventArgs e) 
    { 
#if DEBUG 
     DoSomething(); 
#else 
     try 
     { 
      DoSomething(); 
     } 
     catch (Exception ex) 
     { 
      Logger.Log(ex); 
      MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     finally 
     { 
      CleanUp(); 
     } 
#endif 
    } 

私の現在のアプローチの一例である。このアプローチでは、コードの大幅な重複が発生し、私が代わりを見つけることを期待しています。

私はlambdaを使用して、内部で条件付きコンパイルを使用してこのような例外を処理または再現するカスタムtry catchブロックハンドラを作成する方法を検討しました。

void TryCatchFinally(Action tryBlock, Action<Exception> catchBlock, Action finallyBlock) 
    { 
#if DEBUG 
     tryBlock.Invoke(); 
     finallyBlock.Invoke(); 
#else 
     try 
     { 
      tryBlock.Invoke(); 
     } 
     catch (Exception ex) 
     { 
      catchBlock.Invoke(ex); 
     } 
     finally 
     { 
      finallyBlock.Invoke(); 
     } 
#endif 
    } 

しかし、私は、標準のトライキャッチ構文を保つことを好むだろう(プラスこのアプローチは、私は大きな変更を加えることなく、既存のコードにそれを適用することができなかったことを意味する)

誰もがこれまで良い方法を発見しました誰かが私のバージョンの改善について考えることができますか?

答えて

2

私はあなたがこれを行う必要があるのか​​分かりません - 私は誰かがこのようなデバッグの例外に近づいたのを見たことはありません。

違うコードパスを必要とせずに例外がスローされたときにブレークするようにVisual Studioを設定できますか?私が正しく質問を理解している場合

デバッグ - > Exceptions->は

を「スローさ」をチェック - これは、VSのデバッグのためにあなたの問題を解決します

+0

男の子私は愚かだと感じますか?いいえ、私はしませんでした.... –

+0

ちょっと - それは起こる:)私はそれが最初に出て以来、私が正直であるなら、私はまだ調査したことがない多くのオプションがありますVSを使用してきた! –