2010-12-15 12 views
6

Tengo una aplicación .NET 2.0 fallando que no da una excepción ni ningún otro tipo de mensaje cuando falla la aplicación. Capturo el evento Application.ThreadException y no se recibe nada cuando se bloquea. ¡Después de ejecutar algunos días, la aplicación se ha ido! Ningún mensaje en el registro de eventos de Windows, ningún archivo de volcado o lo que sea ... Intenté ejecutar la aplicación en varias computadoras, pero después de algunos días, aparece el problema..net bloqueos de aplicaciones inesperados sin excepción

La aplicación se está comunicando con otra PC a través de una conexión TCP/IP, y todos los datos son válidos todo el tiempo, sin conexiones rotas o lo que sea. Hay suficiente memoria, también en el momento del bloqueo, etc. El espacio en disco tampoco presenta ningún problema. No hay opción para actualizar a .NET 4.0.

En este momento la aplicación se ejecuta en windbg, así que espero que esto le dará algo de información ..

Si usted tiene alguna experiencia con esto, o tiene algunos consejos útiles o herramientas, que me haga saber!

Respuesta

2

Cuando una aplicación .Net se cierra repentinamente sin ningún mensaje de error o los controladores de excepciones no controladas se activan, es muy probable que la aplicación encuentre un desbordamiento de pila. Esto terminará rápidamente el proceso en muchos casos sin ejecutar ningún controlador.

+0

¿no hay forma de obtener algún tipo de rastro o algo en el registro de eventos? ¿Incluso solo "morí"? –

+1

@John, debería aparecer en el registro de eventos, pero solo indicará "desbordamiento de pila". He descubierto que WinDbg es mejor que VS en general, que se romperá y te dará la oportunidad de ver la pila, mientras que es más probable que VS salga repentinamente mientras se depura. – JaredPar

+0

Esperaba algo en el registro de eventos, pero el OP dijo que no había nada. ¿Qué fuente de evento, id y log se usarán? –

2

Probar AppDomain.UnhandledException. Application.ThreadException solo se produce cuando se produce una excepción en los subprocesos de UI.

3

Si utiliza TCP/IP, entonces es bastante probable que utilice subprocesos. Si un hilo muere con una excepción no controlada, muy común cuando se llama a EndXxxx(), entonces tu aplicación termina. Esto puede ser silencioso si Windows Error Reporting está desactivado en la máquina, algo común en los servidores. Al menos atrapa ObjectDisposedException para que puedas manejar una conexión que se desconecta abruptamente o se cierra a la fuerza.

Y sí, escriba un controlador de eventos para AppDomain.CurrentDomain.UnhandledException, suscríbase en su método Main(). Registre o muestre el valor de e.ExceptionObject.ToString() para que pueda decir exactamente en qué se está muriendo.

2

Tuve este problema.

Escribí una aplicación .Net que realizaba emulación de teclas en otras aplicaciones. Lo dejaría funcionando toda la noche esperando encontrar que había hecho todo mi trabajo por la mañana. Simplemente se fue. Escribió un registro cada vez que entró y salió de una rutina para poder ver exactamente lo que había hecho. Nada, ninguna excepción de registro. Solo trabajo, trabaja, trabaja, trabaja, trabaja. And then, Nothing.

Resulta que era porque estaba usando un montón de llamadas API y las llamaba con mucha frecuencia. Esto estaba causando algún tipo de pérdida de memoria, presumiblemente en el espacio de trabajo de mi aplicación.

<dirtyhack> La forma en que fue resuelto por escrito otra aplicación .Net (aplicación 2), que puso en marcha el estrellarse una (1 aplicación). Después de tanto tiempo, la aplicación 1 se terminaría, pero la aplicación de shell 2 justo antes. La aplicación 2 comenzaría entonces la copia de seguridad de la aplicación 1. </dirtyhack>

y así sucesivamente, hasta que todo el trabajo haya terminado! Desordenado y frustrante, pero terminó trabajando bastante bien :) Estoy seguro de que hay mucho más mucho mejor manera de hacer esto. Probablemente no estaba coordinando mis llamadas COM API correctamente o lo que sea.

Pero parece que al cerrar la aplicación y reiniciarla se liberaba la memoria (junto con las fugas) y se dejaba que comenzara de nuevo.

Tal vez no sea útil en su circunscripción, pero esa es mi historia. Amén.

Cuestiones relacionadas