2

我的 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 上的框架 4.0)。

感谢您的任何提示。

4

1 回答 1

10

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

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

于 2012-06-15T18:19:42.040 回答