[笔记]Windows核心编程《二十三》结构化异常处理

网友投稿 869 2022-09-14

[笔记]Windows核心编程《二十三》结构化异常处理

[笔记]Windows核心编程《二十三》结构化异常处理

文章目录

​​前言​​​​总结​​

​​1.SEH(Structured Exception Handling)和SJLJ(SetJump LongJump)区别对比​​​​SEH:​​

前言

结构化异常处理,SEH(Structured Exception Handling)

SEH的好处:

就是当你编写程序时,只需要关注程序要完成的任务。如果在运行时发生什么错误,系统会发现并将发生的问题通知你。使用 S E H所造成的负担主要由编译程序来承担,而不是由操作系统承担。当异常块(exception block)出现时,编译程序要生成特殊的代码。编译程序必须产生一些表( t a b l e)来支持处理S E H的数据结构。编译程序还必须提供回调( c a l l b a c k)函数,操作系统可以调用这些函数,保证异常块被处理。编译程序还要负责准备栈结构和其他内部信息,供操作系统使用 和参考。

SEH 包含两个主要功能:

结束处理异常处理

SEH和c++异常处理区别: 不要将结构化异常处理同 C + +的异常处理相混淆。C + +异常处理是一种不同形 式的异常处理,其形式是使用C + +关键字catch和throw。微软的Visual C++也支持C + + 的异常处理,并且在内部实现上利用了已经引入到编译程序和 Wi n d o w s操作系统的结 构化异常处理的功能。

一个结束处理程序能够确保去调用和执行一个代码块(结束处理程序,termination handler),

而不管另外一段代码(保护体, guarded body)是如何退出的。结束处理程序的文法结构(使

用微软的Visual C++编译程序)如下:

__try{ //Guard body...}__finally{ // Terminal Handler...}

__try和__finally关键字用来标出结束处理程序两段代码的轮廓。在上面的代码段中,操作系

统和编译程序共同来确保结束处理程序中的 --finally 代码块能够被执行,不管保护体(try块)

是如何退出的。不论你在保护体中使用 return,还是goto,或者是longjump,结束处理程序

(finally块)都将被调用。

总结

1.SEH(Structured Exception Handling)和SJLJ(SetJump LongJump)区别对比

SEH:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:IDEA 接口调试插件 HTTP Client(ideally)
下一篇:解决 DevExpress21 控件不在工具箱显示问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~