winnt.h) (EXCEPTION_RECORD64 结构

描述异常。

语法

typedef struct _EXCEPTION_RECORD64 {
  DWORD   ExceptionCode;
  DWORD   ExceptionFlags;
  DWORD64 ExceptionRecord;
  DWORD64 ExceptionAddress;
  DWORD   NumberParameters;
  DWORD   __unusedAlignment;
  DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;

成员

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
线程尝试将浮点值除以浮点除数 0。
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 数组中定义的元素数。

__unusedAlignment

ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]

描述异常的其他参数的数组。 RaiseException 函数可以指定此参数数组。 对于大多数异常代码,数组元素是未定义的。 下表描述了定义了数组元素的异常代码。

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

如果此值为 8,则线程会导致用户模式数据执行防护 (DEP) 冲突。

第二个数组元素指定不可访问数据的虚拟地址。

EXCEPTION_IN_PAGE_ERROR
数组的第一个元素包含一个读写标志,该标志指示导致访问冲突的操作类型。 如果此值为零,则表示线程尝试读取不可访问的数据。 如果此值为 1,则表示线程尝试写入不可访问的地址。

如果此值为 8,则线程会导致用户模式数据执行防护 (DEP) 冲突。

第二个数组元素指定不可访问数据的虚拟地址。

第三个数组元素指定导致异常的基础 NTSTATUS 代码。

注解

若要使调试器能够调试在不同体系结构上运行的目标 (32 位与 64 位) ,请使用此结构的显式形式之一。

typedef struct _EXCEPTION_RECORD32 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD ExceptionRecord;
    DWORD ExceptionAddress;
    DWORD NumberParameters;
    DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;

typedef struct _EXCEPTION_RECORD64 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD64 ExceptionRecord;
    DWORD64 ExceptionAddress;
    DWORD NumberParameters;
    DWORD __unusedAlignment;
    DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;

要求

   
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
标头 winnt.h (包括 Windows.h)

另请参阅

EXCEPTION_DEBUG_INFO

EXCEPTION_POINTERS

GetExceptionInformation

RaiseException

UnhandledExceptionFilter