是否可以在 Visual Studio(C# 调试器)中针对特定代码行抑制首次机会抑制?
我想在调试器中使用第一次机会异常,但是在获得有趣的代码之前,我需要通过每个调试会话来处理大约 50 个第一次机会异常。
目前,我关闭第一次机会异常,然后手动打开它们,但这是一个麻烦和浪费时间。
是否可以在 Visual Studio(C# 调试器)中针对特定代码行抑制首次机会抑制?
我想在调试器中使用第一次机会异常,但是在获得有趣的代码之前,我需要通过每个调试会话来处理大约 50 个第一次机会异常。
目前,我关闭第一次机会异常,然后手动打开它们,但这是一个麻烦和浪费时间。
从 .NET 2.0 开始,如果您使用[ DebuggerNonUserCode ]属性标记方法,调试器将跳过其中的第一次机会异常。
引用 MSDN 链接(强调是我的):
不属于用户专门创建的代码的成员可能会使调试体验复杂化。 此属性禁止在调试器窗口中显示这些附加类型和成员,并自动逐步执行而不是进入设计人员提供的代码。
除了调试之外,没有与此属性相关联的运行时行为。
但是,如果您只有一个方法,其中某些行打算包含在 Visual Studio 的第一次机会异常处理机制中,而其他行要排除在外,那么在这种粒度级别上可能没有解决方案。您始终可以将一个大方法重构为多个方法,并在选择的方法上使用该属性。
附加信息...
本文的示例用法
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()
您捕获它时放入。