2013-05-01 151 views
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。但是我的捕獲聲明沒有抓住它。

什麼會導致這樣的總死亡?我如何防範它?

+0

簡單。謹防遞歸。 – spender 2013-05-01 22:43:42

回答

2

看起來像是一個嚴重的錯誤YAXSerializer

StackOverflowException不能被捕獲(請參閱here以供參考),因爲很少有從這樣的嚴重錯誤中恢復。

編輯:或它是你正在序列化的類錯誤。你在傳遞的對象中有循環引用嗎?

相關問題