Hi Leute,
ich frage mich schon seit einiger Zeit was Leute dazu bewegt, eine Exception unvollständig auszugeben.
Was ich damit meine, ist dass ich in letzter Zeit gehäuft gesehen habe, dass von einer Exception nur die
Hier mal ein Beispiel anhand eines kleinen Formulares:
Wenn ich auf den ersten Button Klicke, bekomme ich folgende Meldung:
Ja super. Es ist eine Exception aufgetreten. Irgendwo in meinem Code der hinter diesem Button liegt, der irgendeine komplexe Funktionalität in Gang setzt, bei der ich nicht nur Dinge von der Platte lese, sondern noch eine Datenbank abfrage, und was an nen WebService Schicke. Na dann mach ich mich mal auf die Suche.
Beim zweiten Button sieht dass dann so aus:
Yay, ich sehe nun an welcher Stelle im Code der Fehler aufgetreten ist, und die gesamte Aufrufliste, sodass ich nachvollziehen kann, wie die Anwendung an diesen Punkt gelangt ist. Das macht die Fehlersuche einfacher.
Aber, das interessanteste passiert dann, wenn man eine Exception überhaupt nicht abfängt:
Neben dem eigenen Code, sieht man hier nun auch welchen Weg die Anwendung im verwendeten Framework genommen hat. Wenn man also Control-Libraries oder Frameworks wie DevExpress benutzt, kann einem das nicht-fangen von Exceptions sogar dabei behilflich sein Fehler in Code zu finden, den man nicht geschrieben hat. Vorausgesetzt, man hat darauf Zugriff. Andernfalls kann man damit immerhin dem Entwickler bescheid geben. Und als Sahnehäubchen werden die meisten User von diesem Dialog eher abgeschreckt, und beenden das Programm, sodass sie nicht mit einem unbekannten Zustand weiterarbeiten.
Nicht falsch verstehen. Natürlich geht nichts über richtiges Testen und Debuggen in der IDE. Jeden Fehler, jede Exception die wir hier finden, ist nicht nur am schnellsten behoben, sondern taucht auch nie beim Anwender auf. Doch für den Fall dass man eben doch mal eine Exception übersieht, finde ich, ist es wichtig sich nicht selbst Steine in den Weg zu legen, indem man der Exception die Möglichkeit nimmt wichtige Infos, vielleicht sogar die wichtigsten Infos mitzuteilen.
Nun also meine Frage, wie kommt es dazu, dass man so oft das absolut nicht hilfreiche
ich frage mich schon seit einiger Zeit was Leute dazu bewegt, eine Exception unvollständig auszugeben.
Was ich damit meine, ist dass ich in letzter Zeit gehäuft gesehen habe, dass von einer Exception nur die
.Message
Property benutzt wird. Seit ich das das erste mal gesehen habe, frage ich mich, warum man nicht gleich die ganze Exception ausgibt?Hier mal ein Beispiel anhand eines kleinen Formulares:
C#-Quellcode
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void btnMessage_Click(object sender, EventArgs e)
- {
- try
- {
- throw new NullReferenceException();
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- private void btnException_Click(object sender, EventArgs e)
- {
- try
- {
- throw new NullReferenceException();
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.ToString());
- }
- }
- }
Wenn ich auf den ersten Button Klicke, bekomme ich folgende Meldung:
Ja super. Es ist eine Exception aufgetreten. Irgendwo in meinem Code der hinter diesem Button liegt, der irgendeine komplexe Funktionalität in Gang setzt, bei der ich nicht nur Dinge von der Platte lese, sondern noch eine Datenbank abfrage, und was an nen WebService Schicke. Na dann mach ich mich mal auf die Suche.
Beim zweiten Button sieht dass dann so aus:
Yay, ich sehe nun an welcher Stelle im Code der Fehler aufgetreten ist, und die gesamte Aufrufliste, sodass ich nachvollziehen kann, wie die Anwendung an diesen Punkt gelangt ist. Das macht die Fehlersuche einfacher.
Aber, das interessanteste passiert dann, wenn man eine Exception überhaupt nicht abfängt:
Neben dem eigenen Code, sieht man hier nun auch welchen Weg die Anwendung im verwendeten Framework genommen hat. Wenn man also Control-Libraries oder Frameworks wie DevExpress benutzt, kann einem das nicht-fangen von Exceptions sogar dabei behilflich sein Fehler in Code zu finden, den man nicht geschrieben hat. Vorausgesetzt, man hat darauf Zugriff. Andernfalls kann man damit immerhin dem Entwickler bescheid geben. Und als Sahnehäubchen werden die meisten User von diesem Dialog eher abgeschreckt, und beenden das Programm, sodass sie nicht mit einem unbekannten Zustand weiterarbeiten.
Nicht falsch verstehen. Natürlich geht nichts über richtiges Testen und Debuggen in der IDE. Jeden Fehler, jede Exception die wir hier finden, ist nicht nur am schnellsten behoben, sondern taucht auch nie beim Anwender auf. Doch für den Fall dass man eben doch mal eine Exception übersieht, finde ich, ist es wichtig sich nicht selbst Steine in den Weg zu legen, indem man der Exception die Möglichkeit nimmt wichtige Infos, vielleicht sogar die wichtigsten Infos mitzuteilen.
Nun also meine Frage, wie kommt es dazu, dass man so oft das absolut nicht hilfreiche
ex.Message
sieht, anstatt dem wesentlich Hilfreicheren ex.ToString()
(Im Falle von Console
bzw. Debug.WriteLine()
sogar nur ex
?)