如何在 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项目选项,可能会很有用。
try/catch
您想要捕获的异常,并在捕获它时加入Debugger.Break()
。