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?
Haben Sie korrekte Symboldateien verwenden (mdb, nicht PDB)? – Evk
Ja (ich nehme an, weil generierte MDB-Datei verwendet wird). Befehl lautet: "C: \ Program Files (x86) \ Mono \ bin \ mono" debug "TestApp.exe" – Horse315