How to simulate a corrupt state exception in .NET 4?
Well, in .NET 4 Microsoft added the HandleProcessCorruptedStateExceptions attribute:
HandleProcessCorruptedStateExceptionsAttribute Class
I want to test this feature. How can I bring my application to a "corrup开发者_JAVA百科t state"?
Screwing up the garbage collected heap is always a good way:
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
}
}
Just dereference a random number:
private static unsafe void AccessViolation()
{
byte b = *(byte*) (8762765876);
}
or overflow the stack:
private static void StackOverflow()
{
StackOverflow();
}
Test HandleProcessCorruptedStateExceptions
feature:
using System.Diagnostics;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
...
[HandleProcessCorruptedStateExceptions]
public void HandleCorruptedStateException()
{
try
{
var ptr = new IntPtr(42);
Marshal.StructureToPtr(42, ptr, true);
}
catch(Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
精彩评论