2012-04-05 60 views
8

Si una aplicación VB6 hace que aparezca un evento Application Hang en el Visor de eventos, ¿cómo puedo obtener más información sobre por qué se cuelga la aplicación?¿Cómo obtener más información sobre el evento Application Hang?

¿Un evento Application Hang significa que la aplicación se ha congelado y se ha bloqueado, o simplemente que se cuelga temporalmente?

Todo lo que consigo en el registro de eventos para este evento es:

Hanging application [MyAppName].exe, version [MyAppVersionNo], hang module hungapp, version 0.0.0.0, hang address 0x00000000. 

Eso no es suficiente y que quieren ser capaces de averiguar más acerca de por qué se está colgando. ¿Qué código cambia u otros pasos que se deben tomar para que la aplicación proporcione más detalles en el registro de eventos?

+0

¿Tiene su aplicación rutinas de larga ejecución cuando está ocupado y no puede responder a los mensajes de Windows? – jac

+0

No que yo sepa. Este registro de eventos proviene de un sitio de cliente. Me gustaría que el evento muestre más información sobre lo que estaba sucediendo en ese momento. – CJ7

+0

Puede hacer un volcado de memoria de proceso (o dejar que el usuario lo haga) cuando la aplicación se cuelga y luego analizarla y observar la pila de llamadas. – MicSim

Respuesta

5

Recomiendo usar Windows Performance Toolkit.La mejor versión para usar es la Evaluación de Windows & Deployment Kit, http://www.microsoft.com/download/en/details.aspx?id=28997

Una vez que está instalado, lo que hace es iniciar Windows Performance Recorder (WPR) y hacer clic en el botón Inicio para comenzar a grabar. A continuación, reproduce el problema con tu aplicación. Luego regrese a WPR y presione el botón Guardar. A continuación, cargue Windows Performance Analyzer y abra el archivo * .ETL que se generó. Luego desea ir a la sección de Actividad del sistema en el Explorador de gráficos, expandirlo y encontrar el gráfico de Retrasos de UI (o podría ser el primer gráfico estacionado en la Actividad del sistema). Haga doble clic en él para obtener la versión detallada en la pestaña Análisis.

Una vez que encuentre la demora de UI que le interesa, puede agregar otro gráfico, como el uso de CPU (muestreado) desde el nodo Procesamiento en Graph Explorer. Cuando los dos gráficos están en la misma pestaña Análisis, su desplazamiento y selección se sincronizarán. Por lo tanto, puede hacer clic en el evento de retraso de la interfaz de usuario y también resaltará el rango correspondiente en Uso de la CPU.

+0

El enlace de arriba está muerto, pruebe este https://www.microsoft.com/en-US/download/details.aspx?id=39982 me muestra solo ADK para Win 8.1 ... – Jakob

+0

Creo que es parte de el SDK ahora, comenzando con Windows 10. https://dev.windows.com/en-us/downloads/windows-10-sdk –

2

El evento de bloqueo de la aplicación significa que Windows ha decidido que la aplicación no responde. Dado que el evento es generado por el sistema operativo y no por la aplicación, sus opciones para obtener información adicional en el evento son extremadamente limitadas.

Esto es lo que parece estar disponible en un evento de aplicación Colgar:

Mensaje: Colgante aplicación% 1, versión% 2, cuelgan módulo% 3, la versión% 4, colgar dirección 0x% 5.

Desde:

http://www.microsoft.com/technet/support/ee/transform.aspx?ProdName=Windows+Operating+System&ProdVer=5.2&EvtID=1002&EvtSrc=Application+Hang&LCID=1033

Si usted cree que la causa del evento es algo que su aplicación hace (en contraposición a algo en el entorno en el que se ejecuta la aplicación), entonces en vez de tratar de pasar información para el evento de bloqueo, debe elevar el nivel de información de registro al modo de depuración y buscar en el archivo de registro de la aplicación para ver qué está haciendo justo antes de dejar de responder.

Si le falta información de registro, o un marco de trabajo de registro en su aplicación, entonces que es donde debe concentrar sus esfuerzos. Lo bueno es que también se beneficiará de una mejor explotación forestal en el futuro. Sin embargo, use un marco de trabajo de registro para poder deshabilitar el registro de nivel de depuración en un entorno de producción, cuando todo funciona sin problemas.

2

Lo abordaría revisando el código en el módulo que Windows ha determinado colgó, cuyo nombre se escribió en el registro de eventos. Intentar obtener más detalles en el evento de bloqueo no será posible porque cuando Windows haya determinado que la aplicación no responde, ya es demasiado tarde.

En el módulo que está colgado, agregaría varias llamadas a DoEvents y también registraría los mensajes de estado directamente en EventLog. Agregar un marco de registro en este punto introduciría complejidad e involucraría una base de datos o acceso a archivos para almacenar los registros.

Windows cree que la aplicación se colgó porque dejó de responder a los mensajes. Desafortunadamente, implementar un segundo hilo en su aplicación VB6 no es trivial, a diferencia de .NET. No obstante, la adición de otro hilo mantendría la aplicación receptiva, pero probablemente aún le quedaría responder la pregunta "¿por qué el código tarda tanto en ejecutarse?"

0

Obtener información de la perspectiva del evento de Windows no ayudará. Intenta tener un seguimiento en tu aplicación que te ayude a obtener la causa exacta.

Cuestiones relacionadas