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