2016-06-20 22 views
0

Dieses Verhalten erschwert Fehler zu beheben, vor allem in externen Bibliotheken. Beispielcode:Mono umfasst nicht voll Stacktrace während Erneutes Auslösen Ausnahme

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(); 
    } 
} 

für Microsoft .NET ausgegeben:

System.NotImplementedException: Das Verfahren oder die Operation ist nicht implementiert. bei TestApp.ExceptionReThrow.M3() in D: \ source \ TestApp \ TestApp \ ExceptionReThrow.cs: Leitung 38 bei TestApp.ExceptionReThrow.M2() in D: \ source \ TestApp \ TestApp \ ExceptionReThrow.cs: Zeile 32 bei TestApp.ExceptionReThrow.M1() in D: \ source \ TestApp \ TestApp \ ExceptionReThrow.cs: Leitung 24 bei TestApp.ExceptionReThrow.Test() in D: \ source \ TestApp \ TestApp \ ExceptionReThrow.cs: Zeile 14

Für mono (4.2.3) -Ausgang wird:

System.NotImplementedException: Das Verfahren oder die Operation wird nicht durchgeführt. bei TestApp.ExceptionReThrow.M3() [0x00001] in D: \ source \ TestApp \ TestApp \ ExceptionReThrow.cs: 38 bei TestApp.ExceptionReThrow.M2() [0x00003] in D: \ source \ TestApp \ TestApp \ ExceptionReThrow .cs: ​​30

Wie Sie sehen können, verliert Mono den Stack zwischen den ersten und zweiten Fanganweisungen. Was ist die Erklärung für diese Funktion? Kann ich es deaktivieren?

+0

Haben Sie korrekte Symboldateien verwenden (mdb, nicht PDB)? – Evk

+0

Ja (ich nehme an, weil generierte MDB-Datei verwendet wird). Befehl lautet: "C: \ Program Files (x86) \ Mono \ bin \ mono" debug "TestApp.exe" – Horse315

Antwort