在重新抛出异常时,Mono不包括完整的堆栈跟踪

时间:2016-06-20 10:45:54

标签: c# mono

此行为很难解决错误,尤其是在外部库中。 示例代码:

public class ExceptionReThrow
{
    public void Test(){
        try
        {
            M1 ();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
    }

    public void M1()
    {
        M2();
    }

    private void M2()
    {
        try{
            M3();
        }catch{
            throw;
        }
    }

    private void M3()
    {
        throw new NotImplementedException();
    }
}

对于Microsoft .Net输出将是:

  

System.NotImplementedException:未实现方法或操作。     在D:\ source \ TestApp \ TestApp \ ExceptionReThrow.cs中的TestApp.ExceptionReThrow.M3():第38行     在D:\ source \ TestApp \ TestApp \ ExceptionReThrow.cs中的TestApp.ExceptionReThrow.M2():第32行     在D:\ source \ TestApp \ TestApp \ ExceptionReThrow.cs中的TestApp.ExceptionReThrow.M1():第24行     在D:\ source \ TestApp \ TestApp \ ExceptionReThrow.cs中的TestApp.ExceptionReThrow.Test():第14行

对于mono(4.2.3)输出将是:

  

System.NotImplementedException:未实现方法或操作。     在D:\ source \ TestApp \ TestApp \ ExceptionReThrow.cs中的TestApp.ExceptionReThrow.M3()[0x00001]:38     在D:\ source \ TestApp \ TestApp \ ExceptionReThrow.cs中的TestApp.ExceptionReThrow.M2()[0x00003]:30

正如您所看到的,mono在第一个和第二个catch语句之间丢失了堆栈。 这个功能有什么解释?我可以禁用吗?

1 个答案:

答案 0 :(得分:0)