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 |
---|---|
|
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. |
|
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. |
|
Se encuentra un punto de interrupción. Este valor se define como STATUS_BREAKPOINT. |
|
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. |
|
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. |
|
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. |
|
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. |
|
Excepción de punto flotante que no está incluida en esta lista. Este valor se define como STATUS_FLOAT_INVALID_OPERATION. |
|
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. |
|
La pila ha desbordado o desbordado, debido a una operación de punto flotante. Este valor se define como STATUS_FLOAT_STACK_CHECK. |
|
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. |
|
Memoria a la que se tiene acceso al subproceso con el modificador PAGE_GUARD. Este valor se define como STATUS_GUARD_PAGE_VIOLATION. |
|
El subproceso intenta ejecutar una instrucción no válida. Este valor se define como STATUS_ILLEGAL_INSTRUCTION. |
|
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. |
|
El subproceso intenta dividir un valor entero por un divisor entero de 0 (cero). Este valor se define como STATUS_INTEGER_DIVIDE_BY_ZERO. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
El subproceso usa su pila. Este valor se define como STATUS_STACK_OVERFLOW. |
|
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