Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 抑制第一次机会异常_C#_Debugging_Visual Studio 2008_Exception_First Chance Exception - Fatal编程技术网

C# 抑制第一次机会异常

C# 抑制第一次机会异常,c#,debugging,visual-studio-2008,exception,first-chance-exception,C#,Debugging,Visual Studio 2008,Exception,First Chance Exception,是否可以在Visual Studio C调试器中为特定的代码行抑制首次机会抑制 我想在调试器中使用第一次机会异常,但在获得感兴趣的代码之前,我需要在每个调试会话中处理大约50个第一次机会异常 目前,我关闭first chance异常,然后手动打开它们,但这既麻烦又浪费时间。发生这种情况是因为错误使用了异常。在你得到有趣的代码之前得到50不是一个好迹象。在VisualStudio中,无法在某些代码中跳过它们,因为它不是为鼓励您所做的工作而设计的 也就是说,我要做的是关闭在调试器中捕获第一次机会的异

是否可以在Visual Studio C调试器中为特定的代码行抑制首次机会抑制

我想在调试器中使用第一次机会异常,但在获得感兴趣的代码之前,我需要在每个调试会话中处理大约50个第一次机会异常


目前,我关闭first chance异常,然后手动打开它们,但这既麻烦又浪费时间。

发生这种情况是因为错误使用了异常。在你得到有趣的代码之前得到50不是一个好迹象。在VisualStudio中,无法在某些代码中跳过它们,因为它不是为鼓励您所做的工作而设计的

也就是说,我要做的是关闭在调试器中捕获第一次机会的异常,显式地尝试/捕获您想要捕获的异常,并将其放入调试器。捕获后中断。

DebuggerNonUserCodeAttribute类 从.NET 2.0开始,如果使用属性标记方法,调试器将跳过其中的第一次异常

引用MSDN链接,重点是我的:

成员 这不是代码的一部分 用户可以专门创建 使调试体验复杂化。 此属性禁止显示 中的这些附加类型和成员 调试器窗口将自动关闭 逐步通过,而不是进入, 设计器提供的代码

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

但是,如果您只有一个方法,其中某些行打算包含在VisualStudio的first chance异常处理机制中,而其他行则被排除在外,那么在这种粒度级别上可能没有解决方案。您始终可以将一个大型方法重构为多个方法,并在选择的方法上使用该属性

其他信息

来自的示例用法

显示可能有用的相关VS项目选项。

我也不例外。我的代码是现有产品的外接程序。现有产品会从外接程序中吞并异常,因此我希望使用第一次机会异常来确保我的异常不会被吞并,但我不想费力地处理包装中未处理的现有异常。我应该重申,这些是第一次机会异常,不是第二次机会的异常。在许多情况下,复杂程序中会出现异常,所有这些都是开发人员无法控制的。例如,当使用元素时元素消失时,自动化会引发异常。任何时候你处理COM,或者注入到另一个进程中,异常都是很常见的。。。我不知道这件事,非常感谢。这使得调试所有意外异常变得更加容易。谢谢,这终于解决了我的问题。Skeet/Gravel的MiscUtil依赖于抛出的异常,它们总是作为第一次机会异常被捕获,即使它们被立即处理。将此属性应用于他们的某些类修复了此问题。您确实意识到这仍然会到达“FirstChanceExceptions”事件处理程序。您的提示只告诉编译器不要打断您指定的方法。这并不能解决这里所问的问题。标识不属于应用程序用户代码一部分的类型或成员。
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;
    }
}