2010-12-06 10 views
7

¿Puedo implementar el manejo de excepciones globales en C++? Mi requisito es intentar ... catch block no se usa en un fragmento de código, entonces debería haber un controlador global de excepciones que manejará todas las excepciones no detectadas.Gestión global de excepciones en C++

puedo lograr que, por favor, dar su sugerencia valiosa :)

+3

No hay intento ... atrapar bloques en C de todos modos. ¿Estás pensando en C++ tal vez? –

+0

Gracias Karl, lo he cambiado a C++. –

+0

Este subproceso de foro de MSDN podría proporcionar algunos enlaces útiles: http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/99cbe120-d8a9-448f-b827-8b61ca0a6a27 –

Respuesta

1

se puede utilizar una combinación de set_terminate y current_exception()

4

En C++ la función terminate se llama cuando una excepción es capturada. Puede instalar su propio manejador de terminación con la función set_terminate. La desventaja es que su controlador de finalización nunca podrá regresar; debe terminar su programa con alguna primitiva del sistema operativo. El valor predeterminado es simplemente llamar al abort()

+2

lo siento pero soy un programador de C#. Entonces, si puedes dar una muestra de código para que pueda ayudarme. Gracias de antemano :) –

0

Cuando se produce una excepción, si no se captura en ese punto, sube la jerarquía hasta que se atrapa realmente. Si no hay un código para manejar la excepción, el programa finaliza.
Puede ejecutar código específico antes de la terminación de hacer la limpieza mediante el uso de sus propios controladores de set_unexpected o set_terminate

+0

A esta y todas las otras respuestas sobre set_terminate: si la excepción no se maneja en el bloque catch, el proceso aún terminará. –

3

me envuelva siempre el más exterior-función en un try-catch como esta:

int main() 
{ 
    try { 
     // start your program/function 
     Program program; program.Run(); 
    } 
    catch (std::exception& ex) { 
     std::cerr << ex.what() << std::endl; 
    } 
    catch (...) { 
     std::cerr << "Caught unknown exception." << std::endl; 
    } 
} 

Esta voluntad atrapa todo El buen manejo de excepciones en C++ no se trata de escribir try-catch en todas partes, sino de atrapar dónde sabes cómo manejarlo (como pareces querer hacer). En este caso, lo único que se debe hacer es escribir el mensaje de error en stderr para que el usuario pueda actuar sobre él.

+0

Daniel, hay varios tipos de excepción que no son capturados por catch (...) especialmente si usa VC++ que diferencia entre el manejo de excepciones estructuradas y no estructuradas. – Jaywalker

+0

Pero esas no son excepciones de C++. (y los errores equivalentes en Linux no son atrapados por un try/catch tampoco) – jalf

+0

Bueno, el cartel solo decía que estaba usando C++. No se mencionó ninguna plataforma específica. –