2011-11-14 10 views
5

El administrador de Windows 7 regularmente detecta mi aplicación WPF como hung, la muestra fantasma y muestra un mensaje que no responde. He estado usando la aplicación durante varias semanas y no la he visto, pero un usuario con el mismo hardware que yo dice que la recibe regularmente.Registrar un seguimiento de la pila cuando Windows detecta la aplicación colgar

Todo lo que se puede ejecutar se ejecuta en una tarea en otro hilo, por lo que no estoy seguro de dónde empezar a buscar el problema. Si el usuario espera a que la aplicación responda, se recupera rápidamente, así que supongo que el problema está relacionado con el hilo de la GUI que ocasionalmente tarda más de 5 segundos en ejecutarse.

¿Hay alguna manera de que pueda detectar cuándo el DWM cree que la aplicación se ha bloqueado para poder registrar un seguimiento de la pila?

Respuesta

1

No he hecho esto en una aplicación WPF, pero la forma tradicional sería enviar un mensaje WM_NULL desde un hilo de fondo de vez en cuando usando SendMessageTimeout, y si el hilo principal de UI no procesa el mensaje en, digamos, 30 segundos, genere un volcado de pila para ese hilo.

1

Un enfoque es escribir un rastro de su programa usando el espacio de nombre System.Diagnostics. Con eso puedes averiguar cuál fue la última acción antes de que tu programa cuelgue. Difícilmente inspeccionará un programa cuando Windows lo considere colgado. :-(

Cuestiones relacionadas