Tengo una aplicación de Windows muy grande y compleja (millones + LOC) escrita en C++. Recibimos un puñado de informes cada día que la aplicación se ha bloqueado y deben cerrarse con fuerza.Detectando aplicación hang
Si bien tenemos informes extensos acerca de fallas en el lugar, me gustaría expandir esto para incluir estos escenarios de suspensión: incluso con un registro pesado implementado, no hemos podido rastrear las causas raíz de algunos de estos. Podemos ver claramente dónde se detuvo la actividad, pero no por qué se detuvo, incluso al evaluar la salida de todos los hilos.
El problema es detectar cuándo se produce un bloqueo. Hasta ahora, lo mejor que se me ocurre es un hilo de vigilancia (ya que tenemos evidencia de que los hilos de fondo continúan ejecutándose sin problemas) que periódicamente hace sonar la ventana principal con un mensaje personalizado, y confirma que se maneja en una de manera oportuna. Esto solo capturará el bloqueo de la interfaz gráfica de usuario (GUI), pero parece ser que está ocurriendo la mayoría de ellos. Si no se recibiera una respuesta dentro de un marco de tiempo configurable, capturaríamos un volcado de memoria y pila, y le daremos al usuario la opción de continuar esperando o reiniciando la aplicación.
¿Alguien sabe de una mejor manera de hacer esto que un sondeo periódico de la ventana principal de esta manera? Parece dolorosamente torpe, pero no he visto alternativas que funcionen en nuestras plataformas: Windows XP y Windows 2003 Server. Veo que Vista tiene herramientas mucho mejores para esto, pero desafortunadamente eso no nos ayudará.
Baste decir que hemos realizado diagnósticos extensos al respecto y hemos tenido un éxito limitado. Tenga en cuenta que adjuntar windbg en tiempo real no es una opción, ya que no obtenemos los informes hasta horas o días después del incidente. Podríamos recuperar un volcado de memoria y archivos de registro, pero nada más.
Cualquier sugerencia más allá de lo que estoy planeando arriba sería apreciada.
Cuando se bloquea, ¿todos los hilos se bloquean? ¿La aplicación continúa generando archivos de registro? –
¿Desea que la aplicación en sí detecte que se ha colgado o tiene un proceso separado para monitorear la aplicación? –
La aplicación, en la mayoría de los escenarios, continúa generando el registro en otros hilos que la ventana principal. En un porcentaje muy bajo de casos, parece que todo el registro se detiene en los hilos. Queremos que la aplicación se autocontrole. –