c# .net asp.net

c# - registrar una StackOverflowException en.NET



asp.net (3)

Recientemente tuve una excepción de desbordamiento de pila en mi aplicación .NET (sitio web asp.net), que sé porque apareció en mi EventLog. Entiendo que una excepción de StackOverflow no se puede capturar o manejar, pero ¿hay alguna forma de registrarla antes de que mate su aplicación? Tengo 100k líneas de código. Si conociera el seguimiento de la pila, o solo una parte del seguimiento de la pila, podría rastrear la fuente del bucle / recursión infinita. Pero sin ninguna información de diagnóstico útil, parece que tomará muchas conjeturas y pruebas.

Intenté configurar un controlador de excepciones no manejado en mi dominio de aplicación (en global.asax), pero no pareció ejecutarse, lo que tiene sentido si se supone que un desbordamiento de pila finalice y no ejecute ningún bloque captura / finalmente.

¿Hay alguna forma de registrar estos, o hay alguna configuración secreta que pueda habilitar que guarde los marcos de la pila en el disco cuando la aplicación falla?


Muy sabio preguntar acerca de Exception en :)

AFAIK, lo único que puede hacer es conseguir un volcado en un accidente. El CLR lo derribará a menos que tenga su propio CLR.

Una pregunta relacionada sobre cómo deshacerse del proceso de trabajo de IIS en un accidente:

Aquí hay un par de otros temas relacionados con SO:

Espero que estos punteros ayuden.


Puede intentar registrar mensajes en puntos clave de su aplicación y eliminar la parte donde se interrumpe el flujo de mensajes de registro.

Luego, intente replicarlo con esa sección de código usando pruebas unitarias.

La única manera de obtener una traza para un error de desbordamiento de pila que conozco es tener una capa intermedia que tome instantáneas del código en ejecución y las escriba. Esto siempre tiene un gran impacto en el rendimiento.


Su mejor apuesta es utilizar ADPlus .

El Equipo de depuración del kernel de Windows NT tiene una buena publicación en el blog sobre cómo capturar las excepciones de CLR. Hay muchos detalles sobre las diferentes opciones de configuración para ello.

ADPlus supervisará la aplicación. Puede especificar que se ejecute en modo de bloqueo para que pueda decirle a ADPlus que tome un volcado de memoria a la derecha cuando se produce la excepción Exception.

Una vez que tenga un volcado de memoria, puede usar WinDbg y una extensión de depuración administrada como Psscor para ver qué Psscor durante el desbordamiento de la pila.