2009-04-09 8 views
13

Estoy utilizando Hudson como servidor de integración continua para probar el código C/C++. Desafortunadamente, tengo un error en alguna parte que causa daños en la memoria, por lo que en algunas máquinas Windows algunas veces obtendré un cuadro de diálogo "Error de aplicación" que explica que una instrucción hace referencia a la memoria que no se puede leer. Este cuadro de diálogo aparece y básicamente cuelga la ejecución de prueba, ya que requiere intervención manual.¿Se puede deshabilitar el cuadro de diálogo "Error de la aplicación"?

¿Hay alguna manera de evitar que aparezca este cuadro de diálogo, por lo que la ejecución de prueba simplemente falla y se informa como tal en Hudson?

¿Es posible generar automáticamente un minivolcado en lugar de mostrar el cuadro de diálogo?

+0

Similar: https://stackoverflow.com/questions/2284138/disable-debug-prompt-on-application-crash y https://stackoverflow.com/questions/3561545/how-to-terminate-a-program -when-it-crashes-which-should-just-fail-a-unit-test – Vadzim

Respuesta

11
  1. Use "informe de errores Desactivar", como el Sr. sugiere suavemente. Vea también this PC World article.
  2. Si tiene MS Visual Studio en su máquina de compilación, detectará Errores de aplicación y aparecerá un cuadro de diálogo. Para deshabilitar estos cuadros de diálogo (y también la función de depuración Just-In-Time de Visual Studio), ejecute el comando drwtsn32.exe -i para configurar el Dr. Watson como depurador del sistema predeterminado. El Dr. Watson generará un volcado de núcleo y saldrá silenciosamente. (Ver este artículo de Microsoft Knowledge Base:. http://support.microsoft.com/kb/q121434/)
+1

¡Gracias! ¡Restaurar la configuración del Dr. Watson y configurarla para que no lo indicara era justo lo que estaba buscando! – mch

+1

El artículo de PC World parece estar vacío. En consecuencia, la primera alternativa no proporciona ninguna respuesta útil. – skyking

-2

Use una declaración try/catch para capturar la excepción y manejarla de la manera que desee.

+1

Try/catch no puede atrapar un acceso de memoria no válido, hasta donde yo sé. – mch

+1

__try/__excepto, sin embargo. – ChrisV

1

Desactivar el informe de errores a través de:

  • edición del registro - añada su aplicación a HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PCHealth \ ERRORREPORTING \ ExclusionList, O
  • haga clic derecho en Mi PC, vaya a la avanzada pestaña y elegir el "error deshabilitar el informe de" opción, O
  • Usted puede navegar a la consola de servicios de herramientas administrativas, encontrar el informe de errores de servicio, ir a propiedades y desactivarlo
1

Puede utilizar las diversas funciones _CrtSetReport para controlar la forma en que el tiempo de ejecución de C/C++ responde a diversos errores (_CrtSetReportHook, _CrtSetReportMode, _CrtSetReportFile, _CrtSetReportHook2)

7

También puede hacer algo como esto programaticaly usando SetErrorMode. Vea el artículo this para más detalles.

Un ejemplo sencillo de cómo usarlo es hacer lo siguiente:

SetErrorMode(GetErrorMode() | SEM_NOGPFAULTERRORBOX); 

Los 'RUP sobre el modo actual con nuestra Además deseada.

+1

En una línea similar, creo que es importante llamar "_set_abort_behavior (0, _WRITE_ABORT_MSG);" en caso de que en el futuro su aplicación falle porque alguien llama "abort()" (comportamiento predeterminado para una excepción de C++ no capturada en Debug builds IIRC) . – pauldoo

2

Además de lo que dijo rkb, si está ejecutando Windows XP de 64 bits, hay dos conjuntos de valores. Los que están en la ubicación de registro habitual y los que están bajo la clave Wow6432Node en HKLM. Para actualizar ambos, ejecute drwtsn32.exe -i desde %SYSTEMROOT%\system32 y %SYSTEMROOT%\SysWOW64.

Cuestiones relacionadas