GetExceptionCode 宏
检索标识发生的异常类型的代码。 只能从异常处理程序的筛选器表达式或异常处理程序块中调用函数。
注意
Microsoft C/C++ 优化编译器将此函数解释为关键字 (keyword) ,它在适当的异常处理语法之外使用会生成编译器错误。
语法
DWORD GetExceptionCode(void);
parameters
此宏没有参数。
返回值
返回值标识异常的类型。 下表标识了由于常见编程错误而可能发生的异常代码。 这些值在 WinBase.h 和 WinNT.h 中定义。
返回代码 | 说明 |
---|---|
|
线程尝试从其无权访问的虚拟地址进行读取或写入。 此值定义为STATUS_ACCESS_VIOLATION。 |
|
线程尝试访问超出边界的数组元素,并且基础硬件支持边界检查。 此值定义为STATUS_ARRAY_BOUNDS_EXCEEDED。 |
|
遇到断点。 此值定义为STATUS_BREAKPOINT。 |
|
线程尝试读取或写入未提供对齐的硬件上未对齐的数据。 例如,16 位值必须在 2 字节边界上对齐,在 4 字节边界上对齐 32 位值,等等。 此值定义为 STATUS_DATATYPE_MISALIGNMENT。 |
|
浮点运算中的一个操作数是反常运算。 非正态值太小,无法表示为标准浮点值。 此值定义为STATUS_FLOAT_DENORMAL_OPERAND。 |
|
线程尝试将浮点值除以浮点除数 0 (零) 。 此值定义为STATUS_FLOAT_DIVIDE_BY_ZERO。 |
|
浮点运算的结果不能完全表示为小数点。 此值定义为STATUS_FLOAT_INEXACT_RESULT。 |
|
此列表中未包括的浮点异常。 此值定义为STATUS_FLOAT_INVALID_OPERATION。 |
|
浮点运算的指数大于相应类型允许的量级。 此值定义为STATUS_FLOAT_OVERFLOW。 |
|
由于浮点操作,堆栈已溢出或不足。 此值定义为STATUS_FLOAT_STACK_CHECK。 |
|
浮点运算的指数小于相应类型允许的幅度。 此值定义为STATUS_FLOAT_UNDERFLOW。 |
|
线程访问了使用 PAGE_GUARD 修饰符分配的内存。 此值定义为STATUS_GUARD_PAGE_VIOLATION。 |
|
线程尝试执行无效指令。 此值定义为STATUS_ILLEGAL_INSTRUCTION。 |
|
线程尝试访问不存在的页面,并且系统无法加载该页。 例如,如果在通过网络运行程序时网络连接断开,则可能会发生此异常。 此值定义为STATUS_IN_PAGE_ERROR。 |
|
线程尝试将整数值除以 0 (零) 的整数除数。 此值定义为STATUS_INTEGER_DIVIDE_BY_ZERO。 |
|
整数运算的结果会创建一个太大而无法由目标寄存器保留的值。 在某些情况下,这将导致执行结果中最重要的位。 某些操作不设置携带标志。 此值定义为 STATUS_INTEGER_OVERFLOW。 |
|
异常处理程序将无效处置返回到异常调度程序。 使用高级语言(如 C)的程序员不应遇到此异常。 此值定义为 STATUS_INVALID_DISPOSITION。 |
|
线程对内核对象使用了句柄,该句柄 (可能是因为已关闭。) 此值定义为 STATUS_INVALID_HANDLE。 |
|
线程在发生不连续异常后尝试继续执行。 此值定义为STATUS_NONCONTINUABLE_EXCEPTION。 |
|
线程尝试使用当前计算机模式中不允许的操作执行指令。 此值定义为STATUS_PRIVILEGED_INSTRUCTION。 |
|
跟踪陷阱或其他单一指令机制发出信号,指示执行了一条指令。 此值定义为STATUS_SINGLE_STEP。 |
|
线程会占用其堆栈。 此值定义为STATUS_STACK_OVERFLOW。 |
|
已执行帧合并。 |
备注
GetExceptionCode 函数只能从异常处理程序的筛选器表达式或异常处理程序块中调用。 如果在执行 __try 块期间发生异常,则计算筛选器表达式,并确定是否执行 __except 块。
筛选器表达式可以调用筛选器函数。 筛选器函数不能调用 GetExceptionCode。 但是, GetExceptionCode 的返回值可以作为参数传递给筛选器函数。 GetExceptionInformation 函数的返回值也可以作为参数传递给筛选器函数。 GetExceptionInformation 返回指向包含异常代码信息的结构的指针。
当存在嵌套处理程序时,将计算每个筛选器表达式,直到将一个筛选器表达式计算为EXCEPTION_EXECUTE_HANDLER或EXCEPTION_CONTINUE_EXECUTION。 每个筛选器表达式都可以调用 GetExceptionCode 来获取异常代码。
返回的异常代码是硬件异常生成的代码,或在 RaiseException 函数中为软件生成的异常指定的代码。
处理断点异常时,请务必递增上下文记录中的指令指针,以继续此异常。
示例
有关示例,请参阅 使用异常处理程序。
要求
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows XP [仅限桌面应用] |
最低受支持的服务器 |
Windows Server 2003 [仅限桌面应用] |
请参阅