2013-05-01 98 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以供参考),因为很少有从这样的严重错误中恢复。

编辑:或它是你正在序列化的类错误。你在传递的对象中有循环引用吗?

相关问题