EXCEPTION_RECORD

【勇芳软件工作室】汉化HomePreviousNext

EXCEPTION_RECORD结构描述了一个例外。

typedef struct _EXCEPTION_RECORD { // exr

DWORD ExceptionCode;

DWORD ExceptionFlags;

struct _EXCEPTION_RECORD *ExceptionRecord;

PVOID ExceptionAddress;

DWORD NumberParameters;

DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];

} EXCEPTION_RECORD;

会员

ExceptionCode

指定发生异常的原因。这是由硬件异常生成的代码,或由软件生成的异常的RaiseException函数指定的代码。以下是由于常见的编程错误而可能发生的异常代码:

含义
EXCEPTION_ACCESS_VIOLATION 
 线程尝试读取或写入其没有适当访问权限的虚拟地址。
EXCEPTION_ARRAY_BOUNDS_EXCEEDED 
 线程尝试访问超出边界的数组元素,底层硬件支持边界检查。
EXCEPTION_BREAKPOINT 
 遇到断点。
EXCEPTION_DATATYPE_MISALIGNMENT 
 该线程尝试读取或写入不提供对齐的硬件上未对准的数据。例如,16位值必须在2字节边界上对齐; 4字节边界上的32位值等等。
EXCEPTION_FLT_DENORMAL_OPERAND 
 浮点运算中的一个操作数是不正常的。异常值是一个太小的值,不能表示为标准浮点值。
EXCEPTION_FLT_DIVIDE_BY_ZERO 
 线程尝试将浮点值除以零的浮点除数。
EXCEPTION_FLT_INEXACT_RESULT 
 浮点运算的结果不能精确地表示为小数。
EXCEPTION_FLT_INVALID_OPERATION 
 此异常表示此列表中未包含的任何浮点异常。
EXCEPTION_FLT_OVERFLOW 
 浮点运算的指数大于相应类型所允许的大小。
EXCEPTION_FLT_STACK_CHECK 
 由于浮点运算,堆栈溢出或下溢。
EXCEPTION_FLT_UNDERFLOW 
 浮点运算的指数小于相应类型允许的数值。
EXCEPTION_ILLEGAL_INSTRUCTION 
 线程尝试执行无效指令。
EXCEPTION_IN_PAGE_ERROR 
 线程尝试访问不存在的页面,并且系统无法加载页面。例如,如果通过网络运行程序时网络连接丢失,则可能会发生此异常。
EXCEPTION_INT_DIVIDE_BY_ZERO 
 线程尝试将整数值除以零的整数除数。
EXCEPTION_INT_OVERFLOW 
 整数运算的结果导致结果的最高有效位的进位。
EXCEPTION_INVALID_DISPOSITION 
 异常处理程序向异常调度程序返回无效的配置。使用高级语言(如C)的程序员不应该遇到这种异常。
EXCEPTION_NONCONTINUABLE_EXCEPTION 
 线程尝试在发生不可持续异常后继续执行。
EXCEPTION_PRIV_INSTRUCTION 
 线程尝试执行在当前机器模式下不允许操作的指令。
EXCEPTION_SINGLE_STEP 
 跟踪陷阱或其他单指令机制发出信号,指示一条指令已被执行。
EXCEPTION_STACK_OVERFLOW 
 线程用完了它的堆栈。

调试控制台进程时可能会发生另一个异常代码。它不会因为编程错误而出现。当CTRL + C被输入到处理CTRL + C信号并被调试的控制台进程时,DBG_CONTROL_C异常代码发生。此异常代码不是由应用程序处理。它只是为了调试器的好处而被提升,并且仅当调试器被附加到控制台进程时被提出。

ExceptionFlags

指定异常标志。该成员可以为零,表示可持续异常,或指示非连续异常的EXCEPTION_NONCONTINUABLE。任何尝试在不可持续异常之后继续执行都会导致EXCEPTION_NONCONTINUABLE_EXCEPTION异常。

ExceptionRecord

指向关联的EXCEPTION_RECORD结构。异常记录可以链接在一起,以便在嵌套异常发生时提供其他信息。

ExceptionAddress

指定发生异常的地址。

NumberParameters

指定与异常关联的参数数。这是ExceptionInformation数组中已定义元素的数量。

ExceptionInformation

指定描述异常的附加32位参数的数组。RaiseException函数可以指定这个参数数组。对于大多数异常代码,数组元素未定义。对于以下异常代码,数组元素定义如下:

异常代码阵列内容
EXCEPTION_ACCESS_VIOLATION 
 数组的第一个元素包含一个读写标志,指示导致访问冲突的操作类型。如果该值为零,则线程尝试读取不可访问的数据。如果该值为1,则该线程尝试写入不可访问的地址。
 第二个数组元素指定不可访问数据的虚拟地址。

也可以看看

EXCEPTION_DEBUG_INFO, EXCEPTION_POINTERS, GetExceptionInformation, RaiseException, UnhandledExceptionFilter