此行为很难解决错误,尤其是在外部库中。 示例代码:
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语句之间丢失了堆栈。 这个功能有什么解释?我可以禁用吗?
答案 0 :(得分:0)
我在Mono论坛上问了同样的问题 - 这似乎是一个错误: http://mono.1490590.n4.nabble.com/Mono-does-not-include-full-stacktrace-while-rethrowing-exception-td4668037.html