在C#中无法捕获0xC0000005异常

Nei*_*her 2 .net c# exception try-catch

我在C#.Net程序中遇到以下异常:

System.Data.dll中发生类型'System.Data.SqlClient.SqlException'的第一次机会异常在myapp.exe中的0x000007feff75121b处发生第一次机会异常:0xC0000005:访问冲突读取位置0x0000000000000000.CustomMarshalers.dll中出现"System.AccessViolationException"类型的第一次机会异常CustomMarshalers.dll中发生未处理的"System.AccessViolationException"类型异常附加信息:尝试读取或写入受保护的内存.这通常表明其他内存已损坏.

我在try/catch(Exception)块中获取它,但它永远不会被捕获.

我正在尝试调试它,看看它为什么会发生,但如果不抓住它就很难做到.

是否可以在C#.Net中捕获0xC0000005异常?(Windows 2008 R2上的Framework 4.0).

谢谢你的任何提示.

Joe*_*oey 8

默认情况下,您无法捕获AccessViolationException,因为它表示尝试读取或写入受保护的内存.您可以将[HandleProcessCorruptedStateExceptions]属性添加到发生它的方法中:

默认情况下,公共语言运行库(CLR)不会将这些异常传递给托管代码,并且不会为它们调用try/*catch*块(以及其他异常处理子句).如果您完全确定要维护对这些异常的处理,则必须将HandleProcessCorruptedStateExceptionsAttribute属性应用于要执行其异常处理子句的方法.CLR仅在具有HandleProcessCorruptedStateExceptionsAttributeSecurityCriticalAttribute属性的方法中将已损坏的进程状态异常传递给适用的异常子句.