(1f68.140c): CLR exception - code e0434f4d (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
KERNELBASE!RaiseException+0x39:
000007fe`fcfcaa7d 4881c4c8000000 add rsp,0C8h
Examinando los detalles de la excepción .NET en cuestión (CLR Exception), podríamos ver que el depurador está capturando la siguiente excepción System.Web.HttpException:
0:032> !printexception
Exception object: 0000000155a173b8
Exception type: System.Web.HttpException
Message: The file '/myApp/myUserControl.ascx' does not exist.
InnerException: <none>
StackTrace (generated):
<none>
StackTraceString: <none>
HResult: 80004005
En esta ocasión, la aplicación ASP.NET maneja la excepción adecuadamente, y el problema no pasa a mayores. No obstante, se puede dar la circunstancia de que la aplicación no maneje la excepción, o no pueda manejarla, en cuyo caso se lanzaría una excepción de second chance. Las excepciones de second chance son la segunda y última oportunidad de capturar una excepción. En la mayoría de los casos, cuando se produce una excepción de second chance, la ejecución el proceso finaliza inmediatamente, se produce un crash.
En el siguiente ejemplo, vemos como se produce una excepción de Stack Overflow, y al no ser manejada por la aplicación (las excepciones de Stack Overflow particularmente, no se pueden manejar) se lanza primero una excepción de first chance, y posteriormente en la misma instrucción de ensamblador, se lanza la excepción de second chance. que provoca la finalización del proceso:
(1f60.1c0c): Stack overflow - code c00000fd (first chance)
eax=00032000 ebx=7ffd9000 ecx=0001f208 edx=7c82860c esi=00000000 edi=00000000
eip=00401237 esp=000378b4 ebp=000378bc iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010206
StackOverflow!_chkstk+0x27:
00401237 8500 test dword ptr [eax],eax ds:0023:00032000=00000000
(1f60.1c0c): Stack overflow - code c00000fd (!!! second chance !!!)
Dependiendo del tipo de escenarios que estemos investigando, puede ser relevante analizar las excepciones de first chance, las de second chance, o las dos.
Hasta el próximo post,
- Daniel Mossberg
Habitualmente, cuando adjuntamos un depurador en modo crash a un proceso, queremos que el depurador que realice una determinada acción cuando se produzca un determinado evento. Básicamente hay dos escenario típicos en los que adjuntaríamos un depurador en modo crash. Para generar volcados de memoria cuando se produzca una determinada excepción de first chance, o para generar volcados de memoria cuando se finalice un proceso inesperadamente al producirse una excepción de second chance. Para más información sobre tipos de excepciones, leer el post ¿Qué son las excepciones de first chance y second chance?
Podemos utilizar dos herramientas distintas para capturar este tipo de volcados, Debug Diagnostics o Adplus. Las herramientas son funcionalmente equivalentes, aunque cada una tiene sus ventajas y sus desventajas. En los siguientes posts encontraréis la información detallada sobre cómo generar los volcados con estas herramientas:
· Cómo capturar volcados de crash con Debug Diagnostics Tool
· Cómo capturar volcados de crash con Adplus (próximamente)
Hasta pronto,