码迷,mamicode.com
首页 > 其他好文 > 详细

SEH 结构化异常

时间:2017-04-24 10:11:10      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:lte   font   自定义   之间   .com   ges   lin   strong   rmi   

Structured Exception Handling是windows特有的异常处理,SEH包含了两个方面的功能:
? 终止处理
? 异常处理


终止处理:
终止处理确保无论被保护代码是如何退出的,另一个代码块总能被调用和执行:
__try
{
//Guarded Body

}
__finally
{
//Termination handler

}

无论在被保护代码中使用了return还是goto,亦或者longjump(除非调用了ExitProcess, EixtThread, TerminateProcess, TerminateThread),终止处理程序被调用,即__finally代码块都能执行。

不建议在try块中使用break,goto,return,continue,这会损失性能增加代码量

有一种值得注意的情况:
Void foo()
{
__try
{
Bar();
{
__finally
{
}
}

此时如果bar发生了异常,在vista以后的系统上foo里的finally不会默认进行全局展开finally里的代码不会执行,全局展开(全局展开是发生在嵌套出现的try-finally和try-except之间)的触发由下面介绍的except的filter返回值决定

异常处理:
终止处理确保无论被保护代码是如何退出的,另一个代码块总能被调用和执行,而异常处理定义了发生异常后,如何执行我们的自定义动作(如果程序正常执行,那么异常处理程序不会被调用):
__try
{
//Guarded Body

}
__expect (exception filter)
{
//Exception handler

}

注意:任何时候创建一个__try块,后面必须跟一个finally代码块或except代码块。try后绝对不能同时又finally和except,也不能有多个finally或多个except,可以将try-finally和try-except互相嵌套。

不同于上面的终止处理程序,在异常处理程序try中使用return,goto,continue,break并不会导致额外开销

技术分享

技术分享

技术分享

 

技术分享

技术分享

技术分享

 

SEH 结构化异常

标签:lte   font   自定义   之间   .com   ges   lin   strong   rmi   

原文地址:http://www.cnblogs.com/llluiop/p/6755101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!