web-dev-qa-db-ja.com

例外がスローされてキャッチされたときに、その例外でデバッガーを停止しないでください

ツール/例外では、例外がスローされたときにデバッガーが停止するオプションを設定しました。捕まるかどうか。

その規則の例外を除外するにはどうすればよいですか?私のコードのどこかに、プログラムロジックの一部であるキャッチされた例外があります。したがって、デバッガがヒットするたびにその例外がデバッガを停止するのは望ましくありません。

例:344行目のnullreference例外(キャッチされる)を無視したい。他のすべての例外で停止したい

89
MichaelD

正しく思い出せば、例外を発生させたくないコードを含むメソッドでDebuggerStepThrough属性を使用できます。メソッドで迷惑な例外を発生させるコードを分離し、属性で装飾できると思います。

40
Chris Chou

DebuggerHidden はあなたの友達です!

共通言語ランタイムは、この属性にセマンティクスを付加しません。ソースコードデバッガーで使用するために提供されています。たとえば、Visual Studio 2005デバッガーは、この属性でマークされたメソッドで停止せず、メソッドにブレークポイントを設定できません。 Visual Studio 2005デバッガーによって認識されるその他のデバッガー属性は、DebuggerNonUserCodeAttributeおよびDebuggerStepThroughAttributeです。

VS2010でテストされ、うまく機能します。

DebuggerStepThroughは一部の特定のデバッガーバージョンでも機能するようですが、DebuggerHiddenは両方の回答に対するコメントに基づいて、より広範な状況で機能するようです。

現在、両方のオプションは イテレータブロックメソッド または async/awaitメソッド では機能しないことに注意してください。これは、後のVisual Studioの更新で修正される可能性があります。

64
Shimmy

DebuggerStepThroughは、try/catchがあるメソッドでデバッガーが壊れないようにするために使用されるものです。

ただし、Visual Studioのデバッグオプション(メニューツール/オプション、ノードデバッグ/全般)の全般設定で[マイコードのみを有効にする(管理のみ)]オプションをオフにしなかった場合にのみ機能します。

http://abhijitjana.net/2010/09/22/tips-on-debugging-using-debuggerstepthrough-attribute/ でその属性に関する詳細情報

DebuggerHiddenは、例外がスローされたメソッドをデバッガーが表示することを単に防止します。代わりに、その属性でマークされていないスタック上の最初のメソッドが表示されます...

14
Valery Letroye

他の回答で指定された属性(およびDebuggerNonUserCode属性などの他の属性)は、Visual Studio 2015ではデフォルトで同じように機能しなくなりました。デバッガは、 VSの古いバージョン。動作を変更したパフォーマンス強化をオフにするには、レジストリ設定を変更する必要があります。

reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1

詳細は visual studio blog で見つけることができます。

(これはおそらくトップアンサーのコメントであるはずですが、十分な担当者がいません)

12
bhh

コード内の特定の場所でスローされた例外を特定することはできません。ただし、特定のタイプの例外を無効にすることはできます。

あなた自身のコードが問題の例外をスローする場合、私はそれを適合する例外から派生したカスタム例外にし、この派生型でデバッグの中断を無効にします。

NullReferenceExceptionとしてシステム例外を無効にすると、システム全体に影響しますが、これはもちろん開発中には望ましくありません。

例外には2種類のブレーク動作があることに注意してください。

  • スロー:選択した場合、このタイプの例外がスローされるとすぐにブレークします
  • ユーザー未処理:選択した場合、このタイプの例外がtry/catchによって処理されない場合にのみ中断します。

NullReferenceExceptionの 'Thrown'のチェックを削除できます。これにより、システムがコード内の問題の行を通過するたびに破損しないという利点が得られますが、システム。

3
Lars Udengaard