Compartir a través de


Provocar excepciones de software

Algunos de los orígenes de errores de programa más comunes no se marcarán como excepciones por el sistema.Por ejemplo, si intenta asignar un bloque de memoria pero hay memoria insuficiente, el tiempo de ejecución o la función API no provoca una excepción pero devuelve un código de error.

Sin embargo, puede tratar cualquier condición como excepción detectando que condición en el código y después señalándolo llamando a la función de RaiseException .Marcando errores de esta manera, puede introducir las ventajas del control de excepciones estructurado a cualquier tipo de error en tiempo de ejecución.

Para utilizar el control de excepciones estructurado con errores:

  • Defina poseen el código de excepción para el evento.

  • Llamada RaiseException cuando detecta un problema.

  • Filtros de control de excepciones de probarle para el código de excepción definido.

El archivo de WINERROR.H muestra el formato de los códigos de excepción.Para asegurarse de que no defina un código que está en conflicto con un código existente de la excepción, establezca el tercer poco más significativo en 1.Los cuatro bits más significativos establecidos como se muestra en la tabla siguiente.

Bits

valor binario recomendado

Descripción

31-30

11

Estos dos bits que describen el estado básico de código: 11 = error, 00 = correctamente, 01 = informativo, 10 = warning.

29

1

Bit del cliente.Establezca en 1 para los códigos definido por el usuario.

28

0

bit reservado.(Licencia establecida en 0.)

Puede establecer los primeros dos bits en un valor distinto del binario 11 si desea, aunque el valor de “error” sea adecuado para la mayoría de las excepciones.Lo importante para recordar es establecer los bits 29 y 28 como se muestra en la tabla anterior.

El código de error resultante debe por consiguiente tener los cuatro bits superiores establecidos en hexadecimal E.Por ejemplo, las definiciones siguientes definen los códigos de excepción que no estén en conflicto con ninguna códigos de excepción de Windows.(Puede, sin embargo, necesario comprobar qué códigos utilizan los archivos DLL de terceros).

#define STATUS_INSUFFICIENT_MEM       0xE0000001
#define STATUS_FILE_BAD_FORMAT        0xE0000002

Una vez que tenga definido un código de excepción, puede utilizarlo para provocar una excepción.Por ejemplo, el código siguiente provoca la excepción de STATUS_INSUFFICIENT_MEM en respuesta a un problema de asignación de memoria:

lpstr = _malloc( nBufferSize );
if (lpstr == NULL)
    RaiseException( STATUS_INSUFFICIENT_MEM, 0, 0, 0);

Si desea generar simplemente una excepción, puede establecer los tres parámetros pasados a 0.Los tres últimos parámetros son útiles para pasar información adicional y establecer una marca que evite controladores de la ejecución de continuación.Vea la función de RaiseException en Windows SDK para obtener más información.

En los filtros del control de excepciones, podrá comprobar los códigos que tiene definido.Por ejemplo:

__try {
    ...
}
__except (GetExceptionCode() == STATUS_INSUFFICIENT_MEM ||
        GetExceptionCode() == STATUS_FILE_BAD_FORMAT )

Vea también

Referencia

Escribir un controlador de excepciones

Control de excepciones estructurado (C++)