我的c#异常被抓到了哪里?

时间:2014-11-11 18:42:19

标签: c# .net visual-studio

我有一个带有很多io异常处理的.net项目,我试图减少它。有时编程错误(例如null refs)正在被io catch块悄悄地处理,他们显然不应该这样做。我可以通过打开break-when-exception-thrown选项来查找抛出这些null引用的位置。但是,当关闭此选项时,我还想知道哪个捕获块贪吃它们。换句话说,当抛出异常时,我希望能够进入或以其他方式识别处理它的捕获块。有一种简单的方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:3)

  

我可以通过打开break-when-exception-thrown选项来查找抛出这些null引用的位置。但是,当关闭此选项时,我还想知道哪个捕获块贪吃它们。

你需要做的就是离开"什么时候抛出异常"并按下你的"步骤"按钮(F10对我来说)。你可能会得到更多的"第一次机会异常"当你冒泡堆栈时,消息框,但最终这个过程将带你进入捕获该异常的catch块。

答案 1 :(得分:1)

在每个catch块中设置断点,如@BradleyDotNet建议

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

此外,您可以在代码中特别捕获Null Exceptions

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

此外,您可能希望进行一些重大更改,然后您可以使用Microsoft企业库的Exception Handling Application Block

答案 2 :(得分:0)

在异常处理中更精细。而不是使用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'类型。