C# - get-Zeile Zahl, die warf Ausnahme
In einem catch
block, wie bekomme ich die Nummer der Zeile, die warf eine Ausnahme?
zur Laufzeit gibt es keinen source-code. was diese Zeile nicht verwendet werden? bei der debug-Zeit, die IDE zeigt deutlich die Linie, die Würfe Ausnahme.
möglich, Duplikat der Exception handling -- Anzeige der Zeilennummer wo der Fehler aufgetreten ist?
mögliche Duplikate von Zeige Zeilennummer in der exception-Behandlung
möglich, Duplikat der Exception handling -- Anzeige der Zeilennummer wo der Fehler aufgetreten ist?
mögliche Duplikate von Zeige Zeilennummer in der exception-Behandlung
InformationsquelleAutor MBZ | 2010-07-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie müssen die Nummer der Zeile, für mehr als nur die formatierte stack-trace erhalten Sie von der Ausnahme.StackTrace, können Sie die StackTrace Klasse:
Beachten Sie, dass dies nur funktioniert, wenn eine pdb-Datei für die assembly.
C# one-liner:
int line = (new StackTrace(ex, true)).GetFrame(0).GetFileLineNumber();
Dies gibt immer 0 zurück für mich. Ist das verursacht durch nicht das müssen eine pdb-Datei? Was ist das und wie um es zu bekommen? (Ich bin mit ASP.net)
Warum sind Sie mit GetFrame(0)? Ich würde denken, dass Sie sollten mit GetFrame(FrameCount-1).
Habe ich gefunden @DewaldSwanepoel Vorschlag mit
GetFrame(st.FrameCount-1)
werden weit mehr als zuverlässig.InformationsquelleAutor Quartermeister
Einfache Art und Weise, verwenden Sie die
Exception.ToString()
Funktion, wird es wieder eine Zeile nach der Ausnahme Beschreibung.Können Sie auch überprüfen Sie das Programm debug-Datenbank enthält die debug-info/logs über die gesamte Anwendung.
Sie erhalten etwas ähnliches wie:
System.Exception: Test at Tests.Controllers.HomeController.About() in c:\Users\MatthewB\Documents\Visual Studio 2013\Projects\Tests\Tests\Controllers\HomeController.cs:line 22
Dies sollte die akzeptierte Antwort. Ich war immer für die ex.Nachricht und fragte sich, warum die dummen VB.net ist nicht in der Lage, die gleichen Informationen wie in Java.
Es ist verrückt, dass diese Antwort nicht mehr upvotes. Das ist einfach, funktioniert zuverlässig und kommt nicht mit der PDB Vorbehalte.
Exception.Message
ist für mich gestorben. Nie wieder.InformationsquelleAutor SimpleButPerfect
Wenn Sie nicht über die
.PBO
Datei:C#
Vb.net
Oder als Erweiterungen auf die Exception-Klasse
Könnten Sie
Regex.Match
mit:[^ ]+ (\d+)
für den gleichen Effekt.InformationsquelleAutor radbyx
Sie könnten
.PDB
symbol verknüpften Dateien auf die assembly, die Metadaten enthalten Informationen und wenn eine Ausnahme geworfen wird, wird Sie enthalten die volle information im stacktrace, wo diese Ausnahme stammt. Es enthält Zeilennummern der einzelnen Methoden in den Stapel.InformationsquelleAutor Darin Dimitrov
Funktioniert es:
InformationsquelleAutor Thirisangu Ramanathan
Überprüfen Sie dieses
InformationsquelleAutor Ram Maurya
Ich habe versucht mit der Lösung Von @davy-c aber hatte Sie eine Ausnahme "System.FormatException: Input string war nicht im richtigen format.'", dies war aufgrund der dort noch text past die Nummer der Zeile, ich veränderte den code, den er geschrieben und das kam mit:
Dies funktioniert für mich in VS2017 C#.
InformationsquelleAutor Joseph Michael
Update auf die Antwort
InformationsquelleAutor Sean Fleming
Erweiterung Methode
Nutzung
InformationsquelleAutor Arvo Bowen
In Global.resx-Datei gibt es ein Ereignis namens " Application_Error
es feuert, wenn ein Fehler Auftritt,können Sie einfach Holen Sie sich alle Informationen über den Fehler,und senden Sie es an einem bug-tracking-e-mail.
Denke auch ich, dass alle u tun müssen, ist die Erstellung der globalen.resx und fügen Sie deren dll ' s (2 dlls) in Ihrem bin Ordner und es wird funktionieren!
Global.ASAX
, richtig ?InformationsquelleAutor Khaled
Diese funktioniert bei mir:
Dies ist absolut unzuverlässig
guter Witz, @2bob
InformationsquelleAutor 2bob