抑制第一次机会exception

是否有可能在Visual Studio(C#调试器)中抑制特定代码行的第一次机会抑制?

我想在调试器中使用第一次机会exception,但在我得到有趣的代码之前,我需要经历每个调试会话的大约50个第一次机会exception。

目前,我关闭了第一次机会exception,然后手动打开它们,但这是一个麻烦和时间下沉。

DebuggerNonUserCodeAttribute类

从.NET 2.0开始,如果使用[ DebuggerNonUserCode ]属性标记方法,则调试器将跳过其中的第一次机会exception。

从MSDN链接引用(强调添加是我的):

不属于用户专门创建的代码的成员可能会使调试体验复杂化此属性禁止在调试器窗口中显示这些辅助类型和成员,并自动逐步执行设计器提供的代码。

除了调试之外,没有与此属性关联的运行时行为。

但是,如果您只有一个方法,某些行旨在包含在Visual Studio的第一次机会exception处理机制中,并且要排除其他行,则可能没有这种粒度级别的解决方案。 您始终可以将大型方法重构为多个方法,并在选择的方法上使用该属性。


附加信息…

本文的示例用法

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项目选项。
替代文字

发生这种情况是因为您使用了exception。 在你得到“有趣的代码”之前获得50并不是一个好兆头。 Visual Studio中没有办法在某些代码中跳过它们,因为它不是为了鼓励你正在做的事情而设计的。

也就是说,我要做的就是关闭在调试器中捕获第一次机会exception,显式try/catch你想要try/catch的exception,并在捕获它时放入Debugger.Break()