Что ж, в .NET 4 Microsoft добавила атрибут HandleProcessCorruptedStateExceptions:
Класс HandleProcessCorruptedStateExceptionsAttribute
Я хочу протестировать эту функцию. Как мне довести свое приложение до «коррумпированного» состояния?
Что ж, в .NET 4 Microsoft добавила атрибут HandleProcessCorruptedStateExceptions:
Класс HandleProcessCorruptedStateExceptionsAttribute
Я хочу протестировать эту функцию. Как мне довести свое приложение до «коррумпированного» состояния?
Испортить кучу собранного мусора - всегда хороший способ:
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
}
}
Просто разыменуйте случайное число:
private static unsafe void AccessViolation()
{
byte b = *(byte*) (8762765876);
}
или переполнить стек:
private static void StackOverflow()
{
StackOverflow();
}
Проверить 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);
}
}