2010-06-01 10 views
10

Pues bien, en .NET 4 Microsoft agregó los HandleProcessCorruptedStateExceptions atribuyen:¿Cómo se simula una excepción de estado corrupto en .NET 4?

HandleProcessCorruptedStateExceptionsAttribute Class

Quiero probar esta función. ¿Cómo puedo llevar mi aplicación a un "estado corrupto"?

+2

le permite decir Atrapalo. ¿Que vas a hacer con eso? – Will

+4

Log it. Tenemos un colapso de producción sin registros en absoluto. Este nuevo registro nos ayudará. –

Respuesta

13

atornillar el montón de basura recogida es siempre una buena manera:

using System; 
using System.Runtime.InteropServices; 


class Program { 
    unsafe static void Main(string[] args) { 
    var obj = new byte[1]; 
    var pin = GCHandle.Alloc(obj, GCHandleType.Pinned); 
    byte* p = (byte*)pin.AddrOfPinnedObject(); 
    for (int ix = 0; ix < 256; ++ix) *p-- = 0; 
    GC.Collect(); // kaboom 
    } 
} 
+0

Funciona como un encanto. Gracias. –

+0

Usted señor, es un caballero y un erudito. – Lou

13

sólo eliminar la referencia de un número aleatorio:

private static unsafe void AccessViolation() 
    { 
     byte b = *(byte*) (8762765876); 
    } 

o desbordamiento de la pila:

private static void StackOverflow() 
    { 
     StackOverflow(); 
    } 
+0

+1 - ¡mucho más simple que la respuesta aceptada! – Timwi

+3

Según Microsoft, StackOverflowException no es un CSE (Excepción de estado dañado) y no se puede capturar como uno: http://dotnetslackers.com/articles/net/All-about-Corrupted-State-Exceptions-in-NET4.aspx# s4-corrupted-state-exceptions-cses-in-net4 – Abel