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

时间:2012-06-15 18:14:10

标签: c# .net 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)。

感谢您的任何提示。

1 个答案:

答案 0 :(得分:8)

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

  

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