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

本文关键字:0xC0000005 异常 | 更新日期: 2023-09-27 18:37:16

我的C#.Net程序中出现以下异常:

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

我在尝试/捕获(异常)块中获取它,但它从未被捕获。

我正在尝试调试它以查看它发生的原因,但如果不捕获它就很难做到这一点。

是否应该在 C#.Net 中捕获0xC0000005异常?(Windows 2008 R2 上的框架 4.0)。

感谢您的任何提示。

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

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

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