ツール/例外では、例外がスローされたときにデバッガーが停止するオプションを設定しました。捕まるかどうか。
そのルールの例外を除外するにはどうすればよいですか?私のコードのどこかに、プログラムロジックの一部であるキャッチされた例外があります。そのため、例外が発生するたびにデバッガーを停止させたくないのは明らかです。
例:344行目のnull参照の例外(キャッチされる)を無視します。他のすべての例外で停止したい
ツール/例外では、例外がスローされたときにデバッガーが停止するオプションを設定しました。捕まるかどうか。
そのルールの例外を除外するにはどうすればよいですか?私のコードのどこかに、プログラムロジックの一部であるキャッチされた例外があります。そのため、例外が発生するたびにデバッガーを停止させたくないのは明らかです。
例:344行目のnull参照の例外(キャッチされる)を無視します。他のすべての例外で停止したい
回答:
正しく思い出せばDebuggerStepThrough
、例外を発生させたくないコードを含むメソッドの属性を使用できます。メソッドで厄介な例外を発生させるコードを分離して、属性で装飾できると思います。
DebuggerStepThrough
属性は、初回例外のデバッガの動作には影響しません。
DebuggerStepThrough
属性はCLRにとって意味がありません。デバッガによって解釈されます。さまざまな状況下では確実に機能しないようで、確実に機能しDebuggerHidden
ます。stackoverflow.com
DebuggerHidden
あなたの友だちです!
共通言語ランタイムは、この属性にセマンティクスを付加しません。ソースコードデバッガーで使用するために提供されています。たとえば、Visual Studio 2005デバッガーは、この属性でマークされたメソッドで停止せず、メソッドにブレークポイントを設定できません。Visual Studio 2005デバッガーによって認識される他のデバッガー属性は、DebuggerNonUserCodeAttributeとDebuggerStepThroughAttributeです。
VS2010でテストされ、優れた動作をします。
ながらDebuggerStepThrough
も、いくつかの特定のデバッガバージョンのために働くようだ、DebuggerHidden
両方の答えへのコメントに基づいて状況の広い範囲のために動作するようです。
現在、どちらのオプションも、イテレーターブロックメソッドやasync / awaitメソッドでは機能しません。これは、Visual Studioの今後のアップデートで修正される可能性があります。
DebuggerHidden
します...
DebuggerStepThroughは、try / catchがあるメソッドでデバッガーが壊れないようにするために使用されるものです。
ただし、Visual Studioのデバッグオプションの一般設定([ツール] / [オプション]、[ノード] [デバッグ] / [一般])で[コードのみを有効にする(管理のみ)]オプションをオフにしなかった場合にのみ機能します。
その属性の詳細については、http://abhijitjana.net/2010/09/22/tips-on-debugging-using-debuggerstepthrough-attribute/をご覧ください。
DebuggerHiddenは、例外がスローされたメソッドをデバッガが表示しないようにするだけです。代わりに、その属性でマークされていないスタック上の最初のメソッドを表示します...
他の回答で指定された属性(およびDebuggerNonUserCode
属性などの他のもの)は、Visual Studio 2015ではデフォルトで同じように機能しなくなりました。以前のバージョンのVSとは異なり、デバッガーはこれらの属性を持つメソッドマーケットの例外で中断します。動作を変更したパフォーマンス強化をオフにするには、レジストリ設定を変更する必要があります。
reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1
詳細については、ビジュアルスタジオのブログをご覧ください。
(これはおそらくトップの回答に対するコメントになるはずですが、十分な担当者がいません)
コードの特定の場所でスローされた例外を特定することはできません。ただし、特定のタイプの例外を無効にすることができます。
独自のコードが問題の例外をスローする場合、私はそれをカスタム例外にして、適切なものから派生させ、この派生型のデバッグブレークを無効にします。
NullReferenceExceptionとしてシステム例外を無効にすると、システム全体に影響しますが、これはもちろん開発中には望ましくありません。
例外には2種類のブレーク動作があります。
NullReferenceExceptionの 'Thrown'のチェックを削除すると、システムがコード内の問題のある行を通過するたびにブレークしないという利点が得られますが、未処理のNullReference期待が他の部分で発生している場合でもブレークすることができます。システム。