(SEH)结构化异常处理ABC

转载 2006年06月04日 07:32:00

千言万语从何说起呢?嗯,还是先说说SEH的特点吧:

SEH的优点在于当你编写代码的时候,可以集中注意力完成任务,如果在运行的时候出现了问题,系统会捕获到错误并且通知你出了问题.

使得SEH工作的任务主要落在编译器而不是操作系统上.当进入,退出异常块时候,你的编译器必须产生特殊的代码.编译器必须产生处理SEH的数据结构,还必须提供操作系统能调用的回调函数来使得异常块能被遍历.编译器还负责准备栈框架何别的供操作系统使用和引用的内部信息.

不同厂家的编译器对实现SEH的方法也许不一样,但功能上大致是一样的,所以我们这里可以忽略SEH具体的实现细节.大多数厂家都遵循了Mircosoft建议的语法.

这里一定要记住:千万不用把SEH同C++的异常处理混淆.C++的异常处理是另外一种异常处理的形式,他使用C++中的try,catch和throw关键字.microsoft 在Visual C++ 2.0的时候加入了C++异常处理.关于C++的异常处理我想在下一篇文章来阐述.

(SEH)结构化异常处理中的关键字:

 __try,__finally,__leave,__execept

(SEH)结构化异常处理的功能分类:

1终止处理程序,2异常过滤程序,3异常处理程序.,4软件异常.

下面就对这四种形式加以讨论.首先来看看终止处理程序.所谓的终止处理程序,是__try {} __finally{}块.他的microsoft

语法是:(以下如果没有特殊说明,指的都是mircosoft的语法)

__try

{

  //Guaded body

...

}

__fianlly

{

 // Termination handler

...

}

关键字 __try 和__finally描述终止处理程序的两个部分.在上面的代码中,操作系统和

编译器一起确保终止处理程序的中__finally代码块被执行,而不管被保护体__try是怎样退出的.

也就是就算你在__try中加如了return,goto,或者longjump,终止程序都会被执行.下面是代码执行的流程:

//1 先于__try块的代码被执行

__try{

  //2 __try中的代码被执行

}

__finally{

 //3 __fianlly中代码被执行

}

// 4 __fianlly后面的代码被执行.

也许这样的描述还不够清楚,是的,要了解SEH是如何工作的,最好的办法就是写段代码来测试一下:

DWORD Fun(void)

{

   DWORD dwTemp;

  // DO any thing u want here

  __try

 {

   WaitForSingleObject(G_hSign,INFINITE);

  dwTemp = 5;

  return dwTemp;

 }

__finally

 {

   ReleaseSemaphore(G_hSign,1,NULL);

 }

 dwTemp = 9;

return dwTemp;

}

也许你已经发现在__try中有一个return语句,如果__finally不被执行的话,那么信号量就不会释放,程序的流程

就出问题了.请记住SEH终止处理程序保证在__try中过早退出时,__finally中代码一定会被执行,然后才返回.

这被称为局部展开(local unwind)  //待续

相关文章推荐

对于结构化异常处理(SEH)的进一步探索

原文来自:http://vicchina.51.net/show_article.php?id=64 本文关键字:SEH, _except_handler3, Windows, VisualC写本文的...

Win32 结构化异常处理(SEH)探秘

Win32 结构化异常处理其核心是操作系统提供的服务,你能找到的关于 SEH 的所有文档都是描述一个特定的编译器运行时库,这个运行库包装着操作系统实现。在本文中,我将一层一层对 SEH 进行剥离,以便...

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

SEH是windows操作系统处理程序错误或异常的技术。SEH是一种系统体制,与具体的程序设计语言无关,但是windows下的编译器多使用SEH实现异常处理。     系统级别的SEH比较好理解,利...

Win32 结构化异常处理(SEH)探秘(续)

未处理异常 在文章的前面,我并没有全面描述 UnhandledExceptionFilter 这个 API。通常情况下你并不直接调用它(尽管你可以这么做)。大多数情况下它都是由 KERNEL32 ...

Win32 结构化异常处理(SEH)探秘

Win32 结构化异常处理其核心是操作系统提供的服务,你能找到的关于 SEH 的所有文档都是描述一个特定的编译器运行时库,这个运行库包装着操作系统实现。在本文中,我将一层一层对 SEH 进行剥离,以便...

深入解析结构化异常处理(SEH)

深入解析结构化异常处理(SEH) 一直对Windows异常处理的原理似懂非懂, 看了下面的文章 ,一切都豁然开朗. 1997年文章,Windows技术的根一直没变: http://www.mic...

Win32结构化异常处理(SEH)——终止处理程序(__try/__finally)

环境:VC++6.0, Windows XP SP3         当我们想编写一个健壮的程序时,我们会用到异常处理,对各种异常进行考虑并进行处理。现在在各种语言都有自己的异常处理机制,比如C...

加密与解密二版菜鸟学习笔记(2) - SEH 结构化异常处理

标 题: 【原创】加密与解密二版菜鸟学习笔记(2) - SEH 结构化异常处理 作 者: ytcswb 时 间: 2005-02-01,16:40:24 链 接: http://bbs.pedi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)