• Sign In
 
  • MSDN Blogs
  • Microsoft Blog Images
  • More ...
Common Tasks
  • Blog Home
  • About
  • RSS for posts
  • Atom
Blog - News
Search
  • Advanced search options...
Twitter (@dmossberg)
Tags
  • ASP
  • ASP.NET
  • Common Language Runtime (CLR)
  • Debugging
  • Ejemplos de Código
  • Failed Request Tracing
  • Herramientas
  • IIS 6.0
  • IIS 7.0
  • Kerberos
  • Log Parser
  • Pages
  • Seguridad
  • Silverlight
  • SSL/TLS
Recent Posts
  • ¿Qué son las excepciones de first chance y second chance?

    Posted over 2 years ago
    by Daniel Mossberg
  • Cuándo y cómo capturar volcados de memoria en modo Crash

    Posted over 2 years ago
    by Daniel Mossberg
Archives
Archives
  • May 2012 (2)
  • November 2010 (1)
  • August 2010 (1)
  • April 2010 (1)
  • March 2010 (2)
  • February 2010 (2)
  • January 2010 (2)
  • December 2009 (5)
  • October 2009 (1)
  • September 2009 (3)
  • August 2009 (1)
  • July 2009 (2)
  • May 2009 (2)
  • April 2009 (4)
  • February 2009 (1)
  • January 2009 (1)
  • December 2008 (1)
Blogs de ASP.NET / IIS
  • If broken it is, fix it you should

  • Notes from a dark corner

  • Never doubt thy debugger

  • Speaking of which...

Otros blogs recomendados
  • Blogs de Soporte en España

MSDN Blogs > The code is out there > February, 2010

February, 2010

  • Subscribe via RSS
Sort by: Most Recent | Most Views | Most Comments
Excerpt View | Full Post View
  • The code is out there

    ¿Qué son las excepciones de first chance y second chance?

    Posted over 2 years ago
    by Daniel Mossberg
    • 2 Comments

    Cuando adjuntamos un depurador a un proceso y se produce una excepción, el depurador es el primero en ser notificado de esa excepción. El depurador puede manejarla, o simplemente dejar que la ejecución siga su curso, en cuyo caso el siguiente en ser notificado de la excepción es la propia aplicación. Por lo tanto, esta primera oportunidad que tiene el depurador para capturar una excepción se llama first chance. Examinando las excepciones con un depurador como WinDbg, podríamos ver algo parecido a esto:

    (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)

    First chance exceptions are reported before any exception handling.

    This exception may be expected and handled.

    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 !!!)

    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

     

    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

  • The code is out there

    Cuándo y cómo capturar volcados de memoria en modo Crash

    Posted over 2 years ago
    by Daniel Mossberg
    • 0 Comments

    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,

    - Daniel Mossberg

Page 1 of 1 (2 items)
  • © 2012 Microsoft Corporation.
  • Terms of Use
  • Trademarks
  • Privacy Statement
  • Report Abuse
  • 5.6.402.223