能力值:
( LV13,RANK:1300 )
|
-
-
26 楼
这个Unwinding到底是系统SEH还是编译器实现的SEH?
=========================================
我怎么觉得Unwinding不是系统的机制,虽然系统提供了Unwinding的实现。
感觉Unwinding是为了C++编译器或C++标准提供的一个接口。
|
能力值:
( LV9,RANK:370 )
|
-
-
27 楼
我想我在1楼时想知道的问题我已经知道了。谢谢了!
|
能力值:
( LV9,RANK:370 )
|
-
-
28 楼
Unwinding的确是操作系统机制的一部分,因为还有一个重要的部分,UnHandledExceptionFilter,这个部分就是当没有用户异常处理程序处理异常的时候操作系统所做的善后工作,:
1、首先如果是地址错误,首先判断该地址是不是位于资源区块中,如果是,那么就将这个区块的只读属性去掉,然后接着执行。
2、如果是其他错误,那么操作系统查看这个线程是不是正在调试过程中,如果是的话,将建立相应的数据结构,并唤醒调试器。
3、如果没有调试器,它将查找是否用户是否安装了UnHandleException回调函数(就是VC或Delphi编译器中发生异常时候弹出的对话框,这个回调函数可以用SetUnhandledExceptionFilter来安装),否则的话就弹出那个对话框(按确定退出,按Canceal调试的那个)。
4、如果按了确定线程将被结束,在结束前系统将再次遍历用户安装的异常处理链表。(Unwinding)这个你可以将我测试用的那个SEHChain例子中的3个异常处理函数都改成不处理异常,这样就会弹出那个对话框,在你“确定”之后你会发现的确系统再次对链表进行了遍历。这就说明Unwinding操作系统也会用到。
5、如果按了Canceal,操作系统就建立一个调试进程,进行调试。
|
|
|