2010-06-01 8 views
10

Nun, in .NET 4 Microsoft fügten die HandleProcessCorruptedStateExceptions Attribut:Wie simuliert man eine fehlerhafte Statusausnahme in .NET 4?

HandleProcessCorruptedStateExceptionsAttribute Class

ich diese Funktion testen möchten. Wie kann ich meine Bewerbung in einen "korrupten Zustand" bringen?

+2

Hier können Sie sagen Fang es an. Was wirst du damit machen? – Will

+4

Melden Sie es an. Wir haben einen Produktionsabsturz ohne irgendwelche Stämme. Dieses neue Protokoll wird uns helfen. –

Antwort

13

den Müll gesammelt Haufen Kniff ist immer ein guter Weg:

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

Funktioniert wie ein Charme. Vielen Dank. –

+0

Sie Sir, sind ein Gentleman und ein Gelehrter. – Lou

13

Gerade dereferenzieren eine Zufallszahl:

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

oder den Stack überlaufen:

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

+1 - viel einfacher als die angenommene Antwort! – Timwi

+3

Laut Microsoft ist StackOverflowException keine CSE (Corrupted State Exception) und kann nicht als eine abgefangen werden: http://dotnetslackers.com/articles/net/All-about-Corrupted-State-Exceptions-in-NET4.aspx# s4-korrumpiert-status-ausnahmen-cses-in-net4 – Abel

Verwandte Themen