Wie zu verwenden Stacktrace zum Fehler zurück Zeilennummer in vb.net
Ich versuche zu erstellen irgendeine Art von Fehler Fang-Methode, die zurückkehren wird der Fehler Zeilennummer. Wir haben eine Abbruch-E-Mail, die gesendet wird, wenn ein Prozess abgebrochen wird, gibt uns die err.Anzahl und err.Beschreibung aber ich würde gerne wissen, wo tatsächlich Fehler aus.
Ich weiß, können Sie Folgendes tun:
1: code here
2: code here
3: code here
etc. und verwenden Sie ERL, um die Nummer, aber es wäre langweilig, zu jeder Zeile raus.
Ist es entweder automatisch tun oder wäre es einfacher zu verwenden Stacktrace? Wenn Stacktrace besser ist, könnte Sie bitte zeigen Sie mir ein Beispiel?
- ERL ist die alte Art, die Dinge von VB6. Gibt es einen Grund, nicht zu verwenden von TRY/Catch? Die Ausnahme-Objekt verfügt über einen schönen stack trace, und enthält die Nummer der Zeile.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Generierung von Zeilennummern in der exception-stack-traces ist ein integriertes feature für die CLR. Sie haben jedoch die Informationen bereitstellen, die es braucht, um der Karte eine code-Adresse, um eine Zeilennummer. Wechseln Sie auf die Release-Konfiguration in Ihrem Projekt. Projekt + Eigenschaften, Registerkarte Kompilieren, Advanced Compile Options. Ändern Sie den "Generate debug info" - Einstellung aus pdb-nur zu Voll. Bereitstellen des .pdb-Dateien, die zusammen mit Ihrem Programm.
Beachten Sie, dass die Nummer der Zeile, die Sie erhalten, ist immer eine Schätzung, also nicht blind Vertrauen, was Sie sehen. Die Zuordnung ist unvollkommen aufgrund der jitter-Optimierer Methoden-inlining und sonst verschieben von code, um das Programm schneller laufen.
Habe ich angepasst, ein Beispiel aus dem anderen forum, in meinem Fall, ich war nicht immer die Nummer der Zeile, wo der Fehler verursacht wurde, so begann ich zu spielen und eine Lösung gefunden, der code lautet wie folgt:
In diesem Beispiel die Zeile 4 wird die den Fehler auslösen Ausnahme, aber einmal habe ich das Prinzip in einer realen Anwendung, die Linie war auf 0, so dass ich begann zu spielen mit dem index in die GetFrame-Eigenschaft, es reicht von 0 bis 4, wenn ich 4 in das Objekt, EUREKA, ich habe die Nummer der Zeile, die das problem verursacht.
Sollten Sie auf jeden Fall verwenden Sie die Stapel-Ablaufverfolgung, da können Sie einen globalen exception fangen Mechanismus, den Sie brauchen, um code nur einmal.
Um die exakte Linie, auf der der Fehler ausgelöst wurde, müssen Sie Schiff die pdb-Dateien mit Ihrer Anwendung. Diejenigen, die pdb-Dateien mit debug-Informationen, einschließlich der Fehlermeldung ist die Zeilennummer.
Wenn Sie wissen wollen, wie zu fangen, nicht behandelte Ausnahmen anmutig, haben Sie einen Blick auf dieser codeproject Artikel.
Können Sie die StackTrace abrufen die Nummer der Zeile auf einen Fehler.