抑制第一次机会异常

Kan*_* Su 24 c# debugging exception first-chance-exception visual-studio-2008

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

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

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

Joh*_*n K 28

DebuggerNonUserCodeAttribute类

从.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;
    }
}
Run Code Online (Sandbox Code Playgroud)

本文显示了可能有用的相关VS项目选项.
替代文字