3

YAX シリアライザー (現在の NuGet バージョン) を使用しています。このコードを実行すると:

void Main()
{
    try
    {
        int zero = 0;
        int result = 100 / zero;
    }
    catch (DivideByZeroException ex)
    {
        LogSaveException(ex);
    }
}

public void LogSaveException(object value)
{
    try
    {
        YAXSerializer serializer = new YAXSerializer(value.GetType());
        string loggedString = serializer.Serialize(value);
        Console.WriteLine(loggedString);
    }
    catch (StackOverflowException)
    {
        Console.WriteLine("Log Error", "Could Not Log object of type " 
                  + value.GetType().ToString() +" due to stack overflow.");
    }
    catch (Exception)
    {
        Console.WriteLine("Log Error", "Could Not Log object of type " 
                + value.GetType().ToString());
    }
}

アプリは次の行で終了します。string loggedString = serializer.Serialize(value);

発生する可能性のある例外をキャッチしようとしました。しかし、アプリはすぐに終了します。

LinqPad で実行してみましたが、LinqPad がクラッシュしました。LinqPad のクラッシュをデバッグしようとしました (ソースがありませんが、そこから情報を取得できる場合もあります)。それを行ったところ、StackOverflowException があったとのことでした。しかし、私のキャッチステートメントはそれをキャッチしませんでした。

そのような完全な死を引き起こすのは何ですか?どうすれば防げますか?

4

2 に答える 2