3

我们的 C# 应用程序中出现神秘的 SEHExceptions,它可能来自一些非托管代码 (FFMPEG)。它没有被 try-catch 块捕获 - 所以我们不确定是什么导致了它,但它可能是由于空引用。

我在 MSDN ( SEHException MSDN Page ) 上找到了这个,上面写着:

.NET Framework 经常遇到自动映射到托管等效项的非托管 SEH 异常。有两种常见的非托管 SEH 异常: STATUS_NO_MEMORY 异常自动映射到 OutOfMemoryException 类。STATUS_ACCESS_VIOLATION 异常自动映射如下:

如果应用legacyNullReferencePolicy,则所有访问冲突都映射到 NullReferenceException 类。

现在,这听起来很有趣——如果我们可以设置这个legacyNullReferencePolicy,也许这些神秘的 NullReferenceExceptions 可以被捕获,我们可以找出它们来自哪里。

但我在网上找不到任何关于legacyNullReferencePolicy的信息。它是什么?我在哪里设置它?

4

1 回答 1

1

我猜legacyNullReferencePolicy在 .Net 4.0 的最后部分被重命名

您正在寻找配置部分中的legacyCorruptedStateExceptionsPolicy设置,<runtime>如下所示:

<configuration>
   <runtime>
      <legacyCorruptedStateExceptionsPolicy enabled="true" />
   </runtime>
</configuration>

或使用此属性装饰需要处理这些状态损坏异常的方法:HandleProcessCorruptedStateExceptionsAttribute

此示例取自作者 Andrew Pardoe 的 CLR Inside Out 系列中的这篇 msdn 文章

[HandleProcessCorruptedStateExceptions] 
[SecurityCritical]
public static int Main() 
{ 
   try
     {
       // Catch any exceptions leaking out of the program 
     }
   catch (Exception e) 
       // We could be catching anything here 
     {

        System.Console.WriteLine(e.Message); 
        return 1; 
     } 

   return 0; 

}
于 2014-02-22T12:00:28.997 回答