Pregunta

Cualquier instrucción ASSERT fallida en Windows hace que aparezca el siguiente mensaje de depuración y congela la ejecución de las aplicaciones. Me doy cuenta de que se trata de un comportamiento esperado, pero se ejecuta periódicamente en una máquina sin cabeza, por lo tanto, evite que las pruebas de la unidad fallen, en lugar de eso, esperen indefinidamente la entrada del usuario.

¿Hay alguna clave de registro o marca de compilador que pueda usar para evitar que este cuadro de mensaje solicite la entrada del usuario mientras aún permite que la prueba falle en ASSERT?

Básicamente, quiero hacer esto sin modificar ningún código, solo cambiando el compilador o las opciones de Windows.

¡Gracias!

Microsoft Visual C ++ Debug Library ASSERT http : //img519.imageshack.us/img519/853/snapshotbu1.png

¿Fue útil?

Solución

De MSDN sobre la macro ASSERT:

En una aplicación MFC ISAPI, una aserción en el modo de depuración mostrará un cuadro de diálogo modal (los cuadros de diálogo ASSERT ahora son modales por defecto); Esto interrumpirá o colgará la ejecución. Para suprimir los cuadros de diálogo de afirmación modal, agregue las siguientes líneas al archivo fuente de su proyecto (projectname.cpp):

// For custom assert and trace handling with WebDbg
#ifdef _DEBUG
CDebugReportHook g_ReportHook;
#endif

Una vez que haya hecho esto, puede usar la herramienta WebDbg (WebDbg.exe) para ver las aserciones.

Otros consejos

Creo que este es un cuadro de diálogo mostrado por _CrtDbgReport para informes de tipo _CRT_ASSERT. Con _CrtSetReportHook, puede adaptar ese comportamiento para toda su aplicación. (es decir, requiere un cambio local) En particular, puede continuar la ejecución después de una afirmación fallida, ignorando así.

En un contexto de prueba unitaria, a menudo es bueno convertir ASSERTs (en realidad llamadas _CrtDbgReport ) en alguna excepción, típicamente una excepción std ::, que contiene texto informativo. Esto tiende a abrirse camino hacia el registro de salida de la prueba de la unidad como un error. Eso es justo lo que quieres: un ASSERT fallido debería ser una prueba de unidad fallida.

Haga eso agregando su función de enlace de informe, como se especifica usando: _CrtSetReportHook()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top