2008-09-17 21 views

Respuesta

3

Debido a la forma en que funcionan las señales y excepciones, no se puede hacer inmediatamente cuando se lanza la señal: las excepciones dependen de ciertos aspectos de la pila que no son verdaderos cuando se llama a un manejador de señal.

Puede establecer una variable global en el controlador de señal, y luego verificar esto en puntos clave en el programa y lanzar una excepción si está configurada. Sin embargo, esto no le da la información exacta sobre la excepción lanzada.

+0

Puede calcular y almacenar el seguimiento de pila en el manejador de la señal usando backtrace_symbols, que al menos le da un seguimiento de la pila completa. –

1

no tengo una solución ya preparada, pero una cosa que podría considerar son signals (no estoy seguro de si se puede tirar con seguridad excepciones de C++ de ellos, pero debería ayudar a la depuración de todos modos.)

Usted podría instalar un manejador de señal para SIGFPE, y usarlo para su depuración.

0

La idea básica será que instale los controladores de señal adecuados para las excepciones de coma flotante. Dentro de su controlador de señal, puede lanzar una excepción (o enviar una señal definida por el usuario a otro proceso que generará la excepción, o enviará un mensaje a otro hilo para algo similar, etc. etc.). Hay varias formas de lanzar la excepción: lo principal es manejar la señal.

3

la opción gcc -fnon-call-exceptions puede ser de alguna utilidad para usted. No pudo encontrar ninguna documentación, por lo que su kilometraje puede variar.

8

Si su implementación en C++ biblioteca estándar es compatible con las funciones de TR1 fetestexcept, feraiseexcept y feclearexcept (la mía no todavía, así que no puede probar esto) puede detectar cinco tipos de errores de punto flotante y luego se puede tirar cualquier excepciones usted quiere.

Consulte here para obtener una descripción de estas funciones.

También recomiendo la sección 12.3, "Gestión del Punto Medio Ambiente flotante" del libro Los ++ extensiones de biblioteca estándar de C: A Tutorial y Referencia por Pete Becker, ISBN-13: 9780321412997, para una excelente descripción de estas funciones con código de muestra.

alt text http://ak.buy.com/db_assets/prod_images/225/202452225.jpg

Cuestiones relacionadas