2012-08-09 17 views
7

Recientemente leí lo siguiente acerca del manejo de excepciones de Windows.¿Qué es un "error de doble pila"?

En ciertas excepciones no controladas, como una falla de doble pila, el sistema operativo finalizará inmediatamente la aplicación sin llamar al filtro de excepción no controlada o un depurador JIT.

¿Qué es una falla de doble pila? ¿Cómo difiere de un error de pila regular?

Respuesta

7

Esta frase probablemente vino de este Codeproject article. Ese sitio no es muy conocido para la revisión técnica. El verdadero significado de "doble falla" está relacionado con los kernels del sistema operativo, se obtiene un doble error cuando el controlador de fallas del kernel que responde a un error de modo de usuario sufre un error. Lo cual es fatal e invoca un pánico de kernel. Pantalla azul en Windows. También algo que existe en los procesadores, un núcleo x86 deja de ejecutar el código cuando sufre una "falla triple".

Nada tan malo aquí, lo que significaba para describir en su artículo es una condición donde un programa bombas debido a un desbordamiento de pila y el código que se ejecuta en respuesta al accidente, como registrado en UnhandledExceptionFilter(), consume el último bit de pila que Windows le da a un subproceso para intentar recuperar desde un SO. Que no es mucho, 8192 bytes (dos páginas) con menos de 7080 bytes utilizables. Si dicho código consume esa reserva, entonces el espectáculo ha terminado, no se pueden realizar más llamadas a funciones. El kernel plantea una infracción de acceso y eso finaliza el proceso incondicionalmente.

Esa pequeña reserva también es la razón por la que el código administrado no puede sobrevivir un SO, el CLR necesita demasiado espacio de pila para reflejar la excepción, por lo que el programa termina inmediatamente sin intentarlo. Un artículo de fondo genérico en páginas de guardia, el mecanismo subyacente, is here.