我们的C#应用程序中遇到了神秘的SEHException,它们可能来自某些非托管代码(FFMPEG)。它没有被try-catch块捕获-因此我们不确定是什么原因引起的,但这可能是由于空引用引起的。
我在MSDN(SEHException MSDN Page)上发现了这一点,它说:
.NET Framework经常会遇到非托管SEH异常,这些异常会自动映射到托管等效项。有两种常见的非托管SEH例外:
STATUS_NO_MEMORY异常自动映射到OutOfMemoryException类。
STATUS_ACCESS_VIOLATION异常自动映射如下:
如果应用legacyNullReferencePolicy,则所有访问冲突都将映射到NullReferenceException类。
现在,这听起来很有趣-如果我们可以设置legacyNullReferencePolicy,也许可以捕获这些神秘的NullReferenceExceptions并找出它们的来源。
但是我找不到有关legacyNullReferencePolicy的任何在线信息。它是什么?我在哪里设置?
最佳答案
我想在.Net 4.0的最后几位中将legacyNullReferencePolicy重命名
您正在<runtime>
配置部分中寻找legacyCorruptedStateExceptionsPolicy设置,如下所示:
<configuration>
<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true" />
</runtime>
</configuration>
或使用以下属性装饰需要处理这些状态损坏异常的方法:HandleProcessCorruptedStateExceptionsAttribute:
此示例取自this msdn article in the CLR Inside Out series of author Andrew Pardoe
[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;
}
关于c# - 什么是legacyNullReferencePolicy?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19790998/