c#——错误调试
c#语言包括结构化异常错误处理的语法。用3个关键字可以标记处能处理异常的代码和指令,如果发生异常,就使用这些指令处理异常。try,catch,finally。它们都有一个关联代码块,必须在连续的代码行中使用。如下:
try{……}
catch(<exceptionType>e){……}
finally{……}
也可以只用try和finally块,二没有catch块,或者有一个try和好几个catch。如果有一个或多个catch,finally就是可以选择的,否则就是必需的。这些代码块的用法如下:、
try——包括抛出异常的代码(在谈到异常时,其中的“抛出”在C#语言中也可以是“生成”或“导致”)。
catch——包括抛出异常时要执行的代码。catch可以使用<exceptionType>,设置为只响应特定的异常类型( 如System.IndexOutOfRangeException),以便提供多个catch。还可以完全省略这个参数,让一般的catch响应所以的异常。
finally——包括总是会执行的代码,如果没有产生异常,则在try之后执行,如果处理了异常,就在catch后执行,或者在未处理的异常上移到调用堆栈之前执行。“上移到调用堆栈”表示,SEH允许嵌套try……catch……finally,可以直接嵌套,也可以在try包含的函数调用中嵌套。例如:如果在被调用的函数中没有catch能处理某个异常,就由调用代码中的catch处理。如果始终没有匹配的catch,就终止应用程序。finally在此之前处理,是因为存在这个块,否则也可以在try……catch……finally结构的外部放置代码。这个嵌套功能能将在外面的“异常处理的注意事项”一节中进一步讨论,所以如果对这个功能感到迷惑,请不必担心。
在try的代码中出现异常后,发生的事件依次是:
try块在发生异常的地方中断程序执行。
如果有catch,就检查该块是否匹配已抛出的异常类型。如果没有catch,就执行finally(如果没有catch,就一定要有finally)。
如果没有catch,但它与已发生的异常类型,就执行它包括的代码,再执行finally(如果有)。
如果catch都不匹配已发生的异常类型,就执行finally(如果有)。
结果