Estoy trabajando en portar una aplicación de Visual C++ a GCC (debería compilarse en MingW y Linux).Manejar portably errores excepcionales en C++
El código existente usa __try { ... } __except(1) { ... }
bloques en unos pocos lugares, de modo que casi nada (salvo los errores de tipo de memoria quizás fuera de memoria) haría que el programa salga sin hacer un registro mínimo.
¿Cuáles son las opciones para hacer algo similar con GCC?
Editar: Gracias por las opciones de puntero/EH en Visual Studio, lo que necesito ahora son algunos ejemplos sobre cómo manejar las señales en Linux. He encontrado this message desde 2002.
¿Qué otras señales además de SIGFPE
y SIGSEVG
debo tener en cuenta? (En su mayoría se preocupa por los que podrían plantearse a partir me haciendo algo mal)
Bounty Información: Quiero que mi solicitud sea capaz de auto-log tantas condiciones de error como sea posible antes de que salga.
¿Qué señales podría obtener y en cuáles sería generalmente imposible registrar un mensaje de error después? (Memoria insuficiente, ¿qué más?)
¿Cómo puedo manejar excepciones y (lo que es más importante) señales de forma portátil que el código al menos funciona igual en Linux y MingW. #ifdef está bien.
La razón por la que no solo tengo un proceso de envoltura que registra el error es que, por motivos de rendimiento, guardo algunos datos en el disco hasta último momento, así que si algo sale mal quiero hacer todos los intentos posibles para escribir los datos salen antes de salir.
El OP está buscando algo para abordar las condiciones excepcionales de menor nivel que las excepciones de nivel de lenguaje C++. En un mundo POSIX, esto significa instalar manejadores de señal para (la mayoría) de todo. En MSVC, el mecanismo __try/__ catch maneja fallas similares (incluido el equivalente de Win32 de SEGFAULT) –
Derecha sobre las trampas. Pero puede configurar MSVC para atrapar SEH usando el estándar 'try' /' catch', como lo describe DrPizza. –