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

发布于 2024-09-03 08:46:05 字数 118 浏览 5 评论 0原文

属性:

那么,在 .NET 4 中,微软添加了HandleProcessCorruptedStateExceptions Class

我想测试这个功能。如何使我的应用程序进入“损坏状态”?

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 "corrupt state"?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

绾颜 2024-09-10 08:46:05

搞砸垃圾收集堆总是一个好方法:

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
  }
}

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
  }
}
瑾夏年华 2024-09-10 08:46:05

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

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

或溢出堆栈:

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

Just dereference a random number:

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

or overflow the stack:

    private static void StackOverflow()
    {
        StackOverflow();
    }
离线来电— 2024-09-10 08:46:05

测试 HandleProcessCorruptedStateExceptions 功能:

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);
    }
}

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);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文