Thomas Woelfers Baustatik Blog

Baustatik-Software und was sonst des Weges kommt

Geworfene Exceptions finden

Mir ist kürzlich aufgefallen das eine Option im Visual Studio viel zu selten genutzt wird - und zwar die, um den Grund für eine geworfene Exception zu finden.

Das Problem: Irgendwo im Code tritt eine Exception auf die nicht behandelt wird. Resultat: Man steht im Visual Studio hinter der Zeile Application.Run() - und hat eine Fehlermeldung vor sich, die schlicht und ergreifend nur den Exception-Text enthält. Ich habe schon häufiger gesehen das Programmierer in dieser Lage vor einem praktisch 'unlösbaren' Problem standen: Wo genau kam diese Excpeption eigentlich her ist die Frage, die offenbar so schwer zu klären ist.

Als 'Workaround' für die Situation gibt es dann häufig Lösungen, bei denen 'lokale' Codebereiche mit try/catch(Exception) 'abgedichtet' werden. Im 'catch' Block wird dann noch meist eine Meldung per Debug.WriteLine() ausgegeben - und zwar einfach nur dafür, um der tatsächlichen Fehlerstelle 'näher' zu kommen.

Dieses Vorgehen ist aber unsinnig. Der richtige Weg findet sich hinter dem Befehl 'Exceptions' im Menu 'Debug'. Dort schaltet man einfach die Option 'Break into the Debugger' ein. Tritt dann eine Exception auf, so findet man sich im Quelltexteditor an der Stelle wieder, bei der die Exception ausglöst wurde: Exception-Quelle gefunden.

So einfach kann das sein :-)

 

Comments (5) -

  • Oliver Sturm

    3/30/2005 3:24:02 PM |

    ... und ich dachte, man muesste nur in die Property StackTrace des Exception-Objekts gucken. Hm.

  • thomas woelfer

    3/30/2005 5:16:36 PM |

    Oliver,

    klar kann man machen (wenn man weiss das der callstack da drin steht Smile ). und wenn man ein projekt mit einer handvoll files hat, dann ist das wohl auch eine prima methode.

    wenn man ein projekt mit vielen files hat (wir haben hier z.b. 4000+ davon), dann ist es _ungeheuer_ praktisch, direkt an der richtigen stelle im source zu stehen.

    da man sich zu diesem zeitpunkt noch im debugger mit richtigem scope befindet, kann man als netten nebeneffekt auch noch in den aktuellen zustand der variablen reinsehen Smile

  • Oliver Sturm

    3/31/2005 10:55:03 AM |

    Ich hab ja nicht bezweifelt, dass das nuetzlich sein kann. Aber immerhin muss ich dafuer einen weiteren Testdurchlauf machen und das Ergebnis exakt reproduzieren, oder ich muesste das Feature staendig eingeschaltet haben, was gerade bei groesseren Projekten auch schnell unerwartete Nebeneffekte haben kann... gut moeglich, dass ich dann ueber die eine oder andere Exception stolpere, die mich eigentlich gar nicht interessierte.

    Und ... ich will doch hoffen, dass jeder weiss, dass da der callstack drinsteht.

  • thomas woelfer

    3/31/2005 11:11:07 AM |

    Oliver,

    >> doch hoffen, dass jeder weiss

    ich denke man kann getrost davon ausgehen, as dich diese hoffnung truegt. Smile
    da recht eigentlich ein kurzer blick in die newsgroups...

  • Oliver Sturm

    3/31/2005 12:48:23 PM |

    Ich widerspreche nicht. Ich sagte ja nur, ich will doch hoffen... man wird doch hoffen duerfen. Vielleicht haben wir ja hier schon wieder jemanden erleuchtet. Smile

Comments are closed