一、终止处理程序
1、样式:
__try
{
...
}
finally
{
...
}
2、特性:从try部分退出时必须运行finally部分代码
3、性质:
(1)、从try块正常走到结尾时运行finally代码,
__leave关键字有这种效果
(2)、从try块提前退出(由
goto,
longjump,
continue,
break,
return引发)时,将运行finally代码 (局部展开:会引发临时变量的创建)
(3)、由于try出现异常时,将运行finally代码(全局展开:由于异常发生时程序将从try退出进入except代码块)
二、异常处理程序
1、样式:
__try
{
...
}
__except(exception filter)
{
...
}
2、特性:try代码块中出现异常时,程序将从try退出进入except代码块
3、性质:
(1)、异常处理程序没有局部展开,也就是说try中可以出现continue等关键字,而不出现性能损失,但是有全局展开,阻止全局展开可在finally中添加return
(2)、try后要么跟finally要么跟except
(3)、异常处理程序被执行之前必须执行异常过滤程序,异常过滤程序返回三种值(EX*)之一
(4)、GetExceptionCode函数返回刚刚发生异常的类型
(5)、GetExceptionInformation函数返回异常的详细信息
(6)、RaiseException可以主动抛出一个异常
(7)、如果异常没有被程序处理,则该异常将走以下流程:
:AddVectoredExceptionHandler ->向量化异常处理队列
:UnhandledExceptionFilter
:将异常报告给调试器(假如程序在调试器控制之下)
:SetUnhandledExceptionFilter(全局异常过滤程序)
:AddVectorContinueHandler (向量化异常继续处理队列)
:再次通知调试器,调用调试器
:系统内核获取异常通知用户