Laden...

.NET Exception Demystifier

Erstellt von Abt vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.519 Views
Abt Themenstarter:in
16.806 Beiträge seit 2008
vor 6 Jahren
.NET Exception Demystifier

Der Stacktrace für .NET und C# hat sich im Gegensatz zur Sprache selbst seit der Version 1.0 leider nicht weiterentwickelt und wurde im Prinzip immer unbrauchbarer und undurchsichtiger.
Generics, Linq, Async.. alles hat den StackTrace verkompliziert und er ist in vielen Bereichen nicht mehr lesbar.

Ben Adams, im .NET Core Bereich schon ein großer Name, da er Maßgeblich auch für die vielen Performance-Ziele in .NET Core durch Open Source Beiträge verantwortlich ist, hat sich dem Problem nun angenommen.

https://github.com/benaadams/Ben.Demystifier

Ich bin mir sicher, auch wenn es evtl. Breaking Changes bedeuten könnte, dies einen Platz in eine zukünftige Version von .NET finden wird.
Denn der Status Quo des StackTraces ist - in vielen vielen Bereichen - unbrauchbar.

Einen passenden Pull Request gibt es schon im ASP.NET Repository; hier wird auch auf die CLR verwiesen.
Make stack traces readable

T
2.219 Beiträge seit 2008
vor 6 Jahren

Ich finde das schon sehr genial, kann deinen Aussagen aber nicht zustimmen.
Der Stace Trace in .Net ist genau so, wie er sein muss.
Wäre er unbrauchbar oder unbenutzbar, dann könnten wir keine Fehler als Entwickler finden und beheben.
Er ist manchmal nur etwas lang, da man erst einmal schauen muss durch welche Methoden/Parameter etc. die Fehler auftraten.

Der Stace Trace wurde nicht komplexer, weil es nun Generics, die es nun seit mehr als 10 Jahren gibt, oder Linq gibt.
Er ist nur länger, da selbst in .Net viele Klasse zusammen arbeiten und man entsprechend bis zum eigenen Code einen langen Weg im Stace zurücklegen muss.
Dies macht den Stace Trace nur länger, aber nicht komplexer oder unbrauchbar.

Ich bin nicht sicher ob das deine Aussagen sind oder du den Text irgendwo kopiert hast.
Aber insgesamt klingt es nicht nach deinen bekannten Aussagen.

Insgesamt wäre es aber eine Bereicherung, wenn man dies als Feature hinzufügen kann oder bestimmte Teile des Stace Trace ausblenden kann.
Aber bestimmte Teile sollte erhalten bleiben, da ich ja ggf. auch in den .Net Klassen Fehlern auslöse.
Dann will ich natürlich wissen welche Methode den Fehler geworfen hat, damit ich auch nachvollziehen kann, was der Grund ist.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

Abt Themenstarter:in
16.806 Beiträge seit 2008
vor 6 Jahren

Klar sind das meine Aussagen; sicherlich auch geprägt, weil ich die Schmerzen und Schlussendlich auch diese Idee schon länger in den Microsoft Kanälen verfolge.

Dahingehend kann ich auch Deinen Aussagen nicht zustimmen.
Wäre der StackTrace nicht so (in vielen Bereichen unbauchbar) und komplex, wie er derzeit ist, dann gäbe es den Bedarf eines "Demystifier" ja gar nicht... 🤔
Man sieht es ja an den Beispielen und in dem Vergleich von Ben im GitHub Repository, welche Zeilen alle wirklich unbrauchbar weil völlig unverständlich / nicht nachvollziehbar sind - und welche nun endlich wieder brauchbar werden.
Und man sieht an der Resonanz, welch negative Akzeptanz der heutige StackTrace hat.

Und ja; für mich ist im Alltag in vielen Bereichen der StackTrace unbauchbar geworden und ich nutze ihn nicht.
Dafür nutze ich andere Tools, die mir helfen, Code zu debuggen - und kann so auf den StackTrace verzichten.
Er ist schließlich nicht das einzige Hilfsmittel - oder kannst Du wirklich keine Fehler ohne StackTrace finden und nutzt wirklich keine anderen Hilfsmittel? Würde mich schwer wundern.

T
2.219 Beiträge seit 2008
vor 6 Jahren

Würde mich mal interessieren welche Alternativen du noch nutzt?
Da ich primär mit dem Stace Trace arbeite und auch ohne ihn nicht arbeiten könnte, würde es mich überraschen wenn es bessere Ansätze gibt.

Ich will den Demystifiert nicht schlecht machen, natürlich befürworte ich ihn und würde ihn auch gerne als Feature haben.
Aber gerade da der Stace Trace aus meienr Sicht und Erfahrung heraus auch in vielen Situationen unerlässlich ist, kann ich deine Aussage zur Unbrauchbarkeit auch nicht vollständig teilen.

Natürlich gibt es einige Situationen in denen der Stace Trace entweder in größeren Teilen oder sogar komplett unbrauchbar ist, habe gerade in unserem neuen Projekt schon ein paar Siturationen gehabt wo dies der Fall war.
Aber in sehr vielen Situationen könnten ich oder meine Kollegen nicht arbeiten.
Ein Kunde kann dir ja nicht sagen, was der Fehler ist/war.
Dazu muss man schon durch entsprechende Meldungen oder eben den Stace Trace das Problem ermitteln und beheben.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

Abt Themenstarter:in
16.806 Beiträge seit 2008
vor 6 Jahren

Verwendet ihr aus historischen Gründen "nur" StackTrace, zB bei Legacy Anwendungen - oder warum stehen modernere Hilfsmittel wie ein Insight oder IntelliTrace nicht zur Verfügung?

Das Grundproblem eines StackTrace, dass es nur eine schwer nachzuvollziehende Momentaufnahme der Anwendung ist, lässt sich ja auch durch den Demystifier nicht lösen.
Das Ziel ist es ja Möglichkeiten zu nutzen, die mehr zeigen als nur die Momentaufnahme, zB ein IntelliTrace; und ja, den nutze ich wann immer ich kann.

Und da ich viel in Azure unterwegs bin hab ich hier ja noch viel mehr Möglichkeiten.

Abt Themenstarter:in
16.806 Beiträge seit 2008
vor 6 Jahren

Und passend zum Demystifier hat nun Immo Landwerth auch einen Stack Trace Explorer präsentiert.

https://github.com/terrajobst/stack-trace-explorer

Im Marketplace als Visual Studio Erweiterung zu haben.

6.911 Beiträge seit 2009
vor 6 Jahren

Hallo,

der Stacktrace an sich kann sich ja nicht weiterentwickeln, die Darstellung des Stacktraces jedoch schon.
Es ist passend dass in diesem Punkt etwas geschieht und optional die bereinigte Darstellung angewandt werden kann.

Reflectoren wie IlSpy, etc. können auch Lambda, async-Methoden, etc. "aufbereiten", so dass der Code leserlicher und verständlicher wird. Bei der Darstellung vom Stacktrace wäre / ist das auch hilfreich, wenn es näher am eigenen Code ist anstatt am tatsächlich ausgeführten Code.

Cool finde ich beim Paket von Ben Adams dass dazu relativ wenig Code nötig ist...eine super Lösung.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Abt Themenstarter:in
16.806 Beiträge seit 2008
vor 6 Jahren