Hallo, eine Frage die mich immer wieder mal beschäftigt, wenn ich Fehlerinfos ausgeben in einem Try..Catch.
Gibt es da eigentlich irgendwo eine Angabe in der Exception, die ich gezielt abfragen kann in welcher Klasse und Methode, Zeile der Zwischenfall passiert ??
Bisher gebe ich immer die Methode noch genau an, um den Fehler schnell nachvollziehen zu können.
Oder gibt es da noch andere Hulfsmittel (Kennzeichnung von Methoden mit bestimmten Attributen ...) ??
Über eine Info wäre ich dankbar.
Hört sich danach an, dass Du Dir ein eigenes Loggingsystem gebaut hast - nich so unbedingt die beste Idee 🙂
Serilog zB ist das führende Logging-Framework in .NET und verwendet unter der Haube die Standardschnittstelle von .NET.
Protokollierung in .NET
Loggst Du sauber, so wie es in .NET vorgesehen ist, dann wird anhand der Exception auch der StackTrace ausgelesen, indem alle notwendigen Informationen zur Quelle und Grund enthalten sind.
Im Endeffekt musst Du nichts zusätzlich oder manuell loggen, wenn Du die Grundlegeln vom Logging in .NET beachtest 🙂
Mit .NET 6 gibts ein neues Attribut für einen Logger Message Generator
Quellgenerierung der Kompilierzeitprotokollierung
Der senkt den Performance Impact von Log-Nachrichten enorm.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Du meinst Exception.StackTrace?
Hallo, danke erst mal.
Also ich will jetzt nicht gerade mit einem Schlachtschiff auffahren.
Aber in den Try...Catch - Exceptions , wenn eine Ausnahme auftritt werte ich diese aus und gebe die Infos aus, damit man nachvollziehen kann was passiert ist und wo.
Da meine Frage:
damit ich diese Infos sinnvoll als Infostring ausgeben kann??
Warum schaust denn nicht in die Links, die man Dir extra dafür gibt? 🙂
Der Stack Trace ist genau dafür da.
Da steckt die Methode drin (als Eigenschaft des Frames).
Wenn Dir die Doc zuviel Text ist
-> Google Suche nach "c# method name of stack trace"
Und noch der Verweis auf .NET Basics:
Kompilierter Code sieht anders aus als Dein Quellcode.
Daher wird der StackTrace i.d.R. nicht exakt die Zeilennummer kennen, die Du in Deinem Quellcode hast - vor allem nicht mit der Release Configuration.
Dafür braucht die Runtime PDB Dateien, die man aber (besonders bei Desktop Anwendungen) i.d.R. nicht mit ausliefern sollte.
Angeben von Symboldateien (PDB-Dateien) und Quelldateien im Visual Studio Debugger (C#, C++, Visual Basic, F#)
Daher ist es umso wichtiger, dass Du Dich einfach an die .NET Logging Basics hälst, damit Deine Log Infos nützlich sind.
Eigene Logging-Schnipseleien erfüllen das i.d.R. nicht => Protokollierung in .NET
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo, danke für die Info.
Ja, der StackTrace ist eigentlich genau das was ich brauche, um genau zu wissen wo es im Code kracht.
Danke der Info.