Macro GetExceptionCode

Recupera un código que identifica el tipo de excepción que se produce. Solo se puede llamar a la función desde dentro de la expresión de filtro o el bloque del controlador de excepciones de un controlador de excepciones.

Nota

El compilador de optimización de Microsoft C/C++ interpreta esta función como una palabra clave y su uso fuera de la sintaxis de control de excepciones adecuada genera un error del compilador.

 

Sintaxis

DWORD GetExceptionCode(void);

Parámetros

Esta macro no tiene parámetros.

Valor devuelto

El valor devuelto identifica el tipo de excepción. En la tabla siguiente se identifican los códigos de excepción que pueden producirse debido a errores comunes de programación. Estos valores se definen en WinBase.h y WinNT.h.

Código devuelto Descripción
EXCEPTION_ACCESS_VIOLATION
El subproceso intenta leer o escribir en una dirección virtual para la que no tiene acceso.
Este valor se define como STATUS_ACCESS_VIOLATION.
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
El subproceso intenta acceder a un elemento de matriz que está fuera de los límites y el hardware subyacente admite la comprobación de límites.
Este valor se define como STATUS_ARRAY_BOUNDS_EXCEEDED.
EXCEPTION_BREAKPOINT
Se encuentra un punto de interrupción.
Este valor se define como STATUS_BREAKPOINT.
EXCEPTION_DATATYPE_MISALIGNMENT
El subproceso intenta leer o escribir datos que están mal alineados en el hardware que no proporciona alineación. Por ejemplo, los valores de 16 bits deben alinearse en límites de 2 bytes, valores de 32 bits en límites de 4 bytes, etc.
Este valor se define como STATUS_DATATYPE_MISALIGNMENT.
EXCEPTION_FLT_DENORMAL_OPERAND
Uno de los operandos de una operación de punto flotante es desnormal. Un valor desnormal es uno que es demasiado pequeño para representar como un valor de punto flotante estándar.
Este valor se define como STATUS_FLOAT_DENORMAL_OPERAND.
EXCEPTION_FLT_DIVIDE_BY_ZERO
El subproceso intenta dividir un valor de punto flotante por un divisor de punto flotante de 0 (cero).
Este valor se define como STATUS_FLOAT_DIVIDE_BY_ZERO.
EXCEPTION_FLT_INEXACT_RESULT
El resultado de una operación de punto flotante no se puede representar exactamente como una fracción decimal.
Este valor se define como STATUS_FLOAT_INEXACT_RESULT.
EXCEPTION_FLT_INVALID_OPERATION
Excepción de punto flotante que no está incluida en esta lista.
Este valor se define como STATUS_FLOAT_INVALID_OPERATION.
EXCEPTION_FLT_OVERFLOW
El exponente de una operación de punto flotante es mayor que la magnitud permitida por el tipo correspondiente.
Este valor se define como STATUS_FLOAT_OVERFLOW.
EXCEPTION_FLT_STACK_CHECK
La pila ha desbordado o desbordado, debido a una operación de punto flotante.
Este valor se define como STATUS_FLOAT_STACK_CHECK.
EXCEPTION_FLT_UNDERFLOW
El exponente de una operación de punto flotante es menor que la magnitud permitida por el tipo correspondiente.
Este valor se define como STATUS_FLOAT_UNDERFLOW.
EXCEPTION_GUARD_PAGE
Memoria a la que se tiene acceso al subproceso con el modificador PAGE_GUARD.
Este valor se define como STATUS_GUARD_PAGE_VIOLATION.
EXCEPTION_ILLEGAL_INSTRUCTION
El subproceso intenta ejecutar una instrucción no válida.
Este valor se define como STATUS_ILLEGAL_INSTRUCTION.
EXCEPTION_IN_PAGE_ERROR
El subproceso intenta acceder a una página que no está presente y el sistema no puede cargar la página. Por ejemplo, esta excepción puede producirse si se pierde una conexión de red mientras se ejecuta un programa a través de una red.
Este valor se define como STATUS_IN_PAGE_ERROR.
EXCEPTION_INT_DIVIDE_BY_ZERO
El subproceso intenta dividir un valor entero por un divisor entero de 0 (cero).
Este valor se define como STATUS_INTEGER_DIVIDE_BY_ZERO.
EXCEPTION_INT_OVERFLOW
El resultado de una operación de entero crea un valor demasiado grande para mantener el registro de destino. En algunos casos, esto dará lugar a una realización del bit más significativo del resultado. Algunas operaciones no establecen la marca de transporte.
Este valor se define como STATUS_INTEGER_OVERFLOW.
EXCEPTION_INVALID_DISPOSITION
Un controlador de excepciones devuelve una disposición no válida para el distribuidor de excepciones. Los programadores que usan un lenguaje de alto nivel, como C, nunca deben encontrar esta excepción.
Este valor se define como STATUS_INVALID_DISPOSITION.
EXCEPTION_INVALID_HANDLE
El subproceso usó un identificador para un objeto kernel que no era válido (probablemente porque se había cerrado).
Este valor se define como STATUS_INVALID_HANDLE.
EXCEPTION_NONCONTINUABLE_EXCEPTION
El subproceso intenta continuar la ejecución después de que se produzca una excepción no continuable.
Este valor se define como STATUS_NONCONTINUABLE_EXCEPTION.
EXCEPTION_PRIV_INSTRUCTION
El subproceso intenta ejecutar una instrucción con una operación que no está permitida en el modo de equipo actual.
Este valor se define como STATUS_PRIVILEGED_INSTRUCTION.
EXCEPTION_SINGLE_STEP
Una captura de seguimiento u otro mecanismo de instrucción único indica que se ejecuta una instrucción.
Este valor se define como STATUS_SINGLE_STEP.
EXCEPTION_STACK_OVERFLOW
El subproceso usa su pila.
Este valor se define como STATUS_STACK_OVERFLOW.
STATUS_UNWIND_CONSOLIDATE
Se ha ejecutado una consolidación de fotogramas.

 

Comentarios

Solo se puede llamar a la función GetExceptionCode desde dentro de la expresión de filtro o el bloque del controlador de excepciones de un controlador de excepciones. La expresión de filtro se evalúa si se produce una excepción durante la ejecución del bloque __try y determina si se ejecuta o no el bloque __except .

La expresión de filtro puede invocar una función de filtro. La función filter no puede llamar a GetExceptionCode. Sin embargo, el valor devuelto de GetExceptionCode se puede pasar como parámetro a una función de filtro. El valor devuelto de la función GetExceptionInformation también se puede pasar como parámetro a una función de filtro. GetExceptionInformation devuelve un puntero a una estructura que incluye la información del código de excepción.

Cuando existen controladores anidados, cada expresión de filtro se evalúa hasta que se evalúa como EXCEPTION_EXECUTE_HANDLER o EXCEPTION_CONTINUE_EXECUTION. Cada expresión de filtro puede invocar GetExceptionCode para obtener el código de excepción.

El código de excepción devuelto es el código generado por una excepción de hardware o el código especificado en la función RaiseException para una excepción generada por software.

Al controlar la excepción de punto de interrupción, es importante incrementar el puntero de instrucción en el registro de contexto para continuar con esta excepción.

Ejemplos

Para obtener un ejemplo, vea Uso de un controlador de excepciones.

Requisitos

Requisito Value
Cliente mínimo compatible
Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows Server 2003 [solo aplicaciones de escritorio]

Consulte también

GetExceptionInformation

RaiseException

Funciones estructuradas de control de excepciones

Información general sobre el control de excepciones estructurado