2016-04-07 19 views
0

Wenn die unbehandelte Ausnahme auftritt, möchte ich die Zeile und Quelle, die das Ereignis ausgelöst hat, kennen. Ich kann in der Regel erhalten, dass througUnbehandelte Ausnahme erhalten Sie weitere Informationen

var st = new StackTrace(e, true); 
// Get the top stack frame 
var frame = st.GetFrame(0); 
// Get the line number from the stack frame 
var line = frame.GetFileLineNumber(); 

aber hier heißt es, dass der Ausnahmetyp unterscheidet. Ich fürchte, dass, selbst wenn es funktioniert, es die Zeile melden würde, wo der obige Code ist und nicht die Zeile, die das Ereignis ausgelöst hat.

+0

Fügen Sie einen Ausnahmebehandler hinzu und protokollieren Sie ihn. Wenn Sie 'Exception.ToString()' aufrufen, werden alle Informationen zurückgegeben, die Sie in diesem Snippet zu extrahieren versuchen, und mehr –

Antwort

0

Was Sie versuchen, zur Verfügung zu extrahieren ist bereits von Exception.ToString()

Aus der Dokumentation Aufruf:

Die Standardimplementierung von ToString den Namen der Klasse erhält, die die aktuelle Ausnahme ausgelöst hat, wird die Meldung, das Ergebnis des Aufrufs von ToString für die innere Ausnahme und das Ergebnis des Aufrufs von Environment.StackTrace. Wenn eines dieser Elemente null ist, ist sein Wert nicht in der zurückgegebenen Zeichenfolge enthalten.

+0

nicht sicher, dass Sie haben, was ich will. Wenn eine UNHANDLED-Ausnahme in Quelle xxxx.cs auftritt, möchte ich wissen, wo der Fehler in Quelle yyyy.cs Zeile zzzz auftritt – Luca

+0

Alles, das in der Zeichenfolge erscheint, die von 'Exception.ToString()' zurückgegeben wird. Probier es einfach. Der Versuch, die gleiche Information erneut zu extrahieren, ist eine teure Operation. Um die Zeilennummer zu erhalten, müssen Sie Debug-Symbole zusammen mit Ihrer ausführbaren Datei bereitstellen, da der Laufzeitcode sonst keine Ahnung hat, welcher Vorgang welcher Zeile entspricht. Tatsächlich ... gibt es eine doppelte Frage, die das erklärt –

Verwandte Themen