2010-08-05 15 views
7

Si ejecuto un archivo ejecutable que arroja una excepción (incorporada en la depuración), recibiré un cuadro de diálogo de error, diciendo algo así como "Error en la aserción de depuración" y luego algo de información sobre la excepción. Mientras esto sucede, la ejecución del programa se suspende, hasta que elijo una de las opciones "Anular", "Reintentar" o "Ignorar".¿Cómo puedo desactivar los diálogos de excepción "Biblioteca de depuración de Microsoft Visual C++"?

El hecho es que ejecuto muchas aplicaciones desde un script, y si una de ellas arroja una excepción, pausa mi script hasta que se maneje.

¿Hay alguna manera de desactivar este mecanismo de manejo de excepciones?

EDIT: Recuerdo haber leído acerca de una clave de registro, hace un tiempo, que inhabilitaría la aparición de los mensajes de error. ¿Alguien sabe sobre eso?

Respuesta

1

¿Puedes construir tus ejecutables como lanzamiento? Si recuerdo, eso debería evitar que aparezcan los errores de aserción.

+0

pesar de que son mis aplicaciones, no puedo construir con ellas en la liberación. – Geo

+0

@Geo: si no puede modificar la aplicación en sí, una opción es escribir un pequeño programa que compruebe periódicamente la presencia de esta ventana y le envíe el trazo "I" de la tecla. Lo estoy haciendo así y me ayuda mucho. – Naveen

+0

¿No hay una clave de registro que podamos modificar para lograr el efecto similar? – Geo

4

Si se puede modificar el código fuente de la aplicación (s), echar un vistazo a la función _CrtSetReportMode, por ejemplo:

_CrtSetReportMode(_CRT_ASSERT, 0); 

Ver msdn por más.

2

Si puede modificar el origen, el comportamiento de cancelación (llamado por assert) debe modificarse para suprimir el cuadro de diálogo abortar/reintentar/ignorar.

Al abortar, se seguirá produciendo un crashdump (por defecto) para que no pierda lo que es importante.

Además, puede ajustar el comportamiento de afirmación para escribir solo en stderr. Esto NO es necesario si el comportamiento de aborto es adecuado para lo que desea. Nota: las llamadas _Crtxxx solo están activas en las compilaciones de depuración (/ Zi).

Un cambio mínimo para desactivar el aborto/reintentar/ignorar. Descomente las llamadas _Crt e incluya crtdbg.h para modificar también el comportamiento de afirmación en compilaciones de modo de depuración.

#include <stdlib.h> 
//#include <crtdbg.h> 
int main(int argc,char **argv); 
int main(int argc,char **argv) 
{ 
    // ON assert, write to stderr. 
    //_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); 
    //_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); 

    // Suppress the abort message 
    _set_abort_behavior(0, _WRITE_ABORT_MSG); 

    abort(); 
    return 0; 
} 

msdn assert mode

Cuestiones relacionadas