如何在.NET 4中模拟损坏的状态异常?

10 .net simulation state corrupt

好吧,在.NET 4中,Microsoft添加了HandleProcessCorruptedStateExceptions属性:

HandleProcessCorruptedStateExceptionsAttribute类

我想测试这个功能.如何将我的应用程序置于"腐败状态"?

Han*_*ant 14

拧紧垃圾收集堆始终是一个好方法:

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
  }
}
Run Code Online (Sandbox Code Playgroud)


Rom*_*kov 13

只需取消引用一个随机数:

    private static unsafe void AccessViolation()
    {
        byte b = *(byte*) (8762765876);
    }
Run Code Online (Sandbox Code Playgroud)

或溢出堆栈:

    private static void StackOverflow()
    {
        StackOverflow();
    }
Run Code Online (Sandbox Code Playgroud)

  • 根据微软的说法,StackOverflowException不是一个CSE(腐败状态异常),不能一个一个地抓住它:http://dotnetslackers.com/articles/net/All-about-Corrupted-State-Exceptions-in-NET4.aspx#s4 -corrupted状态的例外 - 自定义搜索引擎功能于NET4 (4认同)