Visual Studio 对异常进行了特殊的支持,它能够在进行了特殊设置后,使代码中的try catch块失效。也就是说,一个异常在正常情况下应该能够被某个特殊的try catch块捕获,但是Visual Studio提供了一种特殊的功能,它能够让异常不被try catch 捕获。
在当前已打开一个解决方法的前提下,从“调试”菜单选择“异常”:
上面的对话框显示了Visual Studio能识别的不同类型的异常,上面包含是异常已有的异常类型,如果定义了自己的异常,那么可以点击“点击”按钮,添加自己的异常。
每一种异常后面都有两个复选框,分别是“引发”、“用户未处理”。如果勾选了“引发”对话框,那么调试器就会在抛出该异常时中断,注意,在中断时调试器还没有去查找任何匹配的catch块。如果异常类型的对话框没有勾选,那么只有在该异常未得到处理时候才中断。
下面使用C#代码来演示这个功能:
首先设置NullReferenceException为勾选状态,
然后抛出NullReferenceException异常,并进行捕获,
class Program { static void Main(string[] args) { String name = null; try { name.IndexOf('a');//引发NullReferenceException异常,调试中断 } catch (NullReferenceException) { } Console.WriteLine("执行完毕"); Console.ReadKey(); } }
通过观察代码可以发现,虽然对NullReferenceException进行了捕获,但是调试器还是中断了。
通常情况下,要对捕捉和处理一个特殊的异常,这个功能就非常有用。或是怀疑某一组件或库吞噬了某个异常然后又重新抛出了一个新异常,但又不确定在那儿设置断点好,这个功能也很有用。
开发人员一般都会保持“引发”对话框未勾选,因为得到异常处理的异常表明异常类型已预见到了异常,并会对他进行处理;应用程序才会继续执行。