3

アンマネージ コード (FFMPEG) から発生している可能性がある、C# アプリケーションで謎の SEHExceptions が発生しています。try-catch ブロックによってキャッチされていないため、原因は特定できませんが、おそらく null 参照が原因です。

MSDN ( SEHException MSDN Page ) でこれを見つけました。

.NET Framework では、対応するマネージに自動的にマップされるアンマネージ SEH 例外が頻繁に発生します。一般的なアンマネージ SEH 例外が 2 つあります。 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 に答える