特定のコード行について、Visual Studio (C# デバッガー) で最初のチャンスの抑制を抑制することは可能ですか?
デバッガーで最初のチャンスの例外を使用したいのですが、興味深いコードに到達する前に、すべてのデバッグ セッションを通過する必要がある約 50 の最初のチャンスの例外があります。
現在、最初のチャンスの例外をオフにしてから手動でオンにしていますが、これは面倒で時間の無駄です。
特定のコード行について、Visual Studio (C# デバッガー) で最初のチャンスの抑制を抑制することは可能ですか?
デバッガーで最初のチャンスの例外を使用したいのですが、興味深いコードに到達する前に、すべてのデバッグ セッションを通過する必要がある約 50 の最初のチャンスの例外があります。
現在、最初のチャンスの例外をオフにしてから手動でオンにしていますが、これは面倒で時間の無駄です。
.NET 2.0 の時点で、メソッドを[ DebuggerNonUserCode ]属性でマークすると、デバッガーは最初の例外をスキップします。
MSDN リンクからの引用 (追加された強調は私のものです):
ユーザーによって特別に作成されたコードの一部ではないメンバーは、デバッグ エクスペリエンスを複雑にする可能性があります。 この属性は、これらの補助型とメンバーのデバッガー ウィンドウでの表示を抑制し、デザイナーが提供するコードではなく、自動的にステップスルーします。
この属性に関連付けられた、デバッグ以外の実行時の動作はありません。
ただし、Visual Studio の最初の例外処理メカニズムに含めることを意図した特定の行を含むメソッドが 1 つしかなく、他の行を除外する場合、このレベルの粒度での解決策はおそらくありません。大きなメソッドをいつでも複数のメソッドにリファクタリングし、選択したメソッドで属性を使用できます。
追加情報...
この記事の使用例
using System.Diagnostics;
using XL = Microsoft.Office.Interop.Excel;
public static class WorkbookExtensions
{
[DebuggerNonUserCode]
public static bool TryGetWorksheet(this XL.Workbook wb, string worksheetName, out XL.Worksheet retrievedWorksheet)
{
bool exists = false;
retrievedWorksheet = null;
try
{
retrievedWorksheet = GetWorksheet(wb, worksheetName);
exists = retrievedWorksheet != null;
}
catch(COMException)
{
exists = false;
}
return exists;
}
[DebuggerNonUserCode]
public static XL.Worksheet GetWorksheet(this XL.Workbook wb, string worksheetName)
{
return wb.Worksheets.get_Item(worksheetName) as XL.Worksheet;
}
}
この記事では、役立つ可能性のある関連する VS プロジェクト オプションを示します。
これは、例外を誤用しているために発生しています。「興味深いコード」に到達する前に 50 を取得することは、良い兆候ではありません。Visual Studio では、一部のコードでそれらをスキップする方法はありません。これは、ユーザーが行っていることを奨励するように設計されていないためです。
そうは言っても、デバッガーで最初のチャンスの例外をキャッチすることをオフにし、try/catch
キャッチしたい例外を明示的にオフにし、キャッチしたDebugger.Break()
ときに a を入れることです。