我的c#异常在哪里被捕获

本文关键字:在哪里 异常 我的 | 更新日期: 2023-09-27 18:30:11

我有一个.net项目,它有很多io异常处理,我正在努力减少这些处理。有时,io catch块会悄悄地处理一些编程错误(比如null refs),而它们显然不应该这样。我只需打开break when exception被抛出选项,就可以找到这些null refs被抛出的位置。然而,我也想知道当这个选项关闭时,哪个catch块正在贪婪地吃掉它们。换句话说,当抛出异常时,我希望能够进入或以其他方式识别处理它的catch块。有简单的方法吗?

我的c#异常在哪里被捕获

我可以通过打开breakwhen-exception选项来查找这些空引用被抛出的位置。然而,我也想知道当这个选项关闭时,哪个捕获块正在贪婪地吃掉它们

你所需要做的就是离开"当抛出异常时中断",然后按下你的"跳过"按钮(对我来说是F10)。当你在堆栈中冒泡时,你可能会得到更多的"First chance exception"消息框,但最终这个过程会把你带到捕获异常的catch块。

在每个catch块中设置一个断点,就像@BradleyDotNet建议的一样

登录每个catch块,如果你只是在调试,你可以使用System.Diagnostics.Debug类,它在这种情况下非常有用

此外,您可以在代码中捕捉到特定的Null异常

try
{
    // Buggy code
}
catch (NullReferenceException NullEx)
{
    // Handle NullReferenceException
}
catch (Exception)
{
    // Handle any othr exception
}

此外,您可能想要进行一些重大更改,然后可以使用Microsoft企业库的异常处理应用程序块

在异常处理中更加精细。与其使用catch-all"Exception"类型,不如使用更细粒度的类型来捕获所需的异常。

        try
        {
            //do stuff
        }
        catch(FieldAccessException e)
        {
            //Take action on this exception type
            Console.Write(e.Message); 
        }
        catch(NullReferenceException ne)
        { 
             //Take action on this exception type
             Console.Write(ne.Message); 
        }

值得注意的是,如果你确实想这样做,你就不能在继承任何类型之前使用"Exception"类型。