visual c++ SEH - EXCEPTION_DISPOSITION枚举和__except()过滤器表达式之间的
visual C++ SEH - correlation between EXCEPTION_DISPOSITION enum and __except() filter expressions
我目前正在阅读关于结构化异常处理 (SEH)机制,并在c++中做一些练习。
我不明白的一件事是-
在excpt.h
文件中有两个重要的定义"groups":
-
EXCEPTION_DISPOSITION
枚举定义和_except_handler
回调函数定义 - 三个宏的定义——
EXCEPTION_EXECUTE_HANDLER
(值为1)、EXCEPTION_CONTINUE_SEARCH
(值为0)、EXCEPTION_CONTINUE_EXECUTION
(值为- 1)
As I understand -
-
EXCEPTION_DISPOSITION
的值在通过异常回调函数处理程序的链表时使用(使用_EXCEPTION_REGISTRATION
struct,由线程信息/环境块指向,由FS
寄存器指向)。 -
三个宏的值用作
_except
过滤器
EXCEPTION_DISPOSITION
枚举的一些名称与上面提到的三个宏具有相同的名称,但它们具有绝对不同的职责(一些用作_except
过滤器,另一些用于迭代_EXCEPTION_REGISTRATION
的链表)。
基本上我的问题是-这种相关性的原因是什么?它们之间是否存在某种"交集"?(它们是否以某种方式"协同工作"?)
我错过了什么吗?
msvc++运行时库对异常的支持是建立在操作系统对异常(SEH)的支持之上的。当然,两者之间有很强的相关性。操作系统只需要- 1,0或1来决定下一步做什么,宏值从SDK中复制。
与枚举不直接匹配,由编译器生成的异常过滤器返回,由c++的try/catch关键字生成。运行时库解释该值并生成SEH值。"嵌套异常"answers"碰撞unwind"究竟是什么意思,嗯,很模糊。并非所有的源代码都是可用的。您需要将其视为纯粹的实现细节,它根本不会影响您自己的代码。
只能在自己的__except()中使用SEH值。
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 带过滤器的现代迭代c++集合
- 使用正则表达式regex_search在字符串中查找字符串
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 概念中的cv限定符需要表达式参数列表
- 为什么constexpr的性能比正常表达式差
- 对于结构,表达式必须是可修改的ivalue
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 将fold表达式与std::一起用于两个元组
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- 标记 '","' 之前的预期主表达式
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 带有用户定义类的c++折叠表达式
- 即使使用调试编译标志,表达式也是"optimized out"
- 用于 ARP 回复数据包的 c/c++ pcap 过滤器表达式
- visual c++ SEH - EXCEPTION_DISPOSITION枚举和__except()过滤器表达式之间的