2009-05-06 6 views
20

簡単に言えば:ビジュアルスタジオの "例外がスローされたときにブレーク"オプションをプログラムで調整できますか?

のVisual Studio 2008年には、DebugメニューはExceptions...オプションがあります。
これをクリックすると、「例外がスローされたときに中断する」ダイアログが表示され、「共通言語ランタイム例外」の横にあるチェックボックスをオンにします。

このボックスにプログラムでチェックを入れたり解除したりできますか?

推敲:

これは(それがキャッチだとスロー再れていない場合)任意のCLR例外がスローされたときにデバッガが破損する原因となるので、これは、トラブルシューティングのための素晴らしいです。

問題は、すべてのCLR例外をキャッチし、.NETフレームワークが内部で多数の例外をスローしてキャッチしてしまうことです。これは、フレームワーク内で問題ではないので、私は本当に気にしない例外の束にデバッガを壊します。
WCFはであり、特にが悪いことがありますが、私のアプリではWCFを使用しています。

私がしたいことは、チェックボックスをオフにして、アプリケーションが起動した後(WCF接続フェーズとすべての内部例外を過ぎてしまった)、それをオンにしてブレークさせますすべての例外今から。 (

  • 私は「すべてのCLR例外」に毛布キャッチを持っている必要はありません知っているが、しかし、可能性のある例外のリストは、およそ2マイルの長さで、それがスクロールして、必要なものを選ぶために永遠にかかりますそして、もし私が何かを忘れたら)。
+1

場合

もありますが、あなたは、単にあなたのコードにブレークポイントをドロップし、手動で例外をオンに考えたことはありますか? –

+0

それは私がやっていることです。それは私が避けようとしているものですが、私はしかし、アプリケーションを再起動するたびに手動でそれらをオン/オフにすることは非常に面倒になることを得る –

答えて

8

これはあなたの質問に直接は対処しませんが、デバッグ例外ダイアログを表示する便利なコードctrl-D + Eがあります。 Ctrl + Alt + Eは同じことを行います。

1

私の頭の上にはないので(ナイスセンスかもしれない)、あなたは未処理のCLR例外でのみ中断するようにデバッガを設定してから、initコード中にすべての例外のハンドラデリゲート/イベントを作成し、 OK、OK、デバッグモードのみ)、CLR例外でVSが破損し始めるコード内のポイントでデリゲート/イベントを削除します。

30

Visual StudioのオートメーションAPI(DTE)を使用してオン/オフを切り替えることができます。 Debugger3.ExceptionGroups APIを見てください。例:

' Turn off NullArgumentException. 
Dim debugger As Debugger3 = DTE.Debugger 
Dim exceptionGroup As ExceptionSettings = dbg.ExceptionGroups.Item("Common Language Runtime Exceptions") 
exceptionGroup.SetBreakWhenThrown(False, "System.NullArgumentException") 

したがって、特定の例外をオン/オフにするマクロを簡単に作成できます。アプリケーションからマクロを呼び出すには、 "devenv/command"を起動します。

また、out-of procのDTEを使用して、Visual Studioを直接(マクロは関係ありません)自動化することができます。

さらに詳しい情報:

  1. Customizing exception handling in the VS Debugger
  2. Debugger3.ExceptionGroups
  3. devenv /command
  4. How to: Get References to the DTE and DTE2 Objects
+0

クール、今も私もそれを行うことができます! – leppie

1

あなたはおそらくマクロを作成することによってこれを行うことができます(Michael Lehenbauerの例に示すように) 、ブレークポイントを再構成してマクロを実行して実行を続行します。気になるコードセクションの最後に同じことをするか、オプションを再び無効にするか、デバッグセッション間で手動で無効にします。

0

(Debugger.IsAttached){Debugger.Break()}

関連する問題