Wo Exception geworfen



  • Wenn man sich beim Debuggen in der Catch Klausel befindet, wie kann man schnell herausfinden in welcher Zeile die Exception geworfen wurde?



  • Wenn da catch (Klasse variablenName) steht einfach variablenName im Quick-Watch aufmachen und sich den Callstack angucken.

    Wenn da einfach nur catch (Klasse) oder gar nur catch steht, dann weiss ich nicht ob das geht. Möglicherweise ja, aber dann wüsste ich nicht wie.

    Es ist oft günstiger den Debugger so einzustellen dass er bei jedem throw stehenbleibt, egal ob das Ding irgendwo gefangen wird oder nicht.



  • Ich habe es in die Form } catch (Exception ex) { gebracht.

    Du meinst mit Quick Watch das Watch Fenster? Ich kann die Variable ex dort hineintun und ansehen. Im Call Stack finde ich aber keine Information in welcher Zeile die Exception geworfen wurde? Da steht nur Line 123, aber Line 123 ist die Line in der Catch Klausel wo ich den Haltepunkt gesetzt habe.



  • Ich benutze das Visual Studio 2013.



  • Ich meine den Eintrag "Quick Watch" im Kontextmenü wenn du nen Rechtsklick auf "ex" machst.
    "ex" in ein Watch Fenster reinzuziehen sollte aber auch funktionieren.

    Und mit "Callstack ansehen" meine ich den Callstack der Exception.
    Einfach mit "+" die Anzeige für die Innereien der Exception aufmachen, und so lange weiter reinvergraben bis du da drinnen den Stacktrace gefunden hast von wo das Ding geworfen wurde.

    Bzw. ein System.Diagnostics.Debug.WriteLine("Hilfeeeeeeeee:" + ex.ToString()) tut es auch.



  • Bei der ToString() Methode wird die Zeilennummer wo die Exception aufgetreten ist angezeigt.

    Wo kann ich im Watch Fenster die Zeilennummer sehen? Welches Attribut enthält die Zeilennummer?



  • Die Property StackTrace .



  • Danke, da steht es 🙂



  • Aber nicht bei jeder Exception steht in der Stacktrace Eigenschaft die Zeilennummer des Fehlers. Bei ToString() steht auch nichts, ich denke ToString() holt sich die Info aus Stacktrace.

    Ich schreibe gerade in ein Grid Control und habe fälschlicherweise in eine nicht existierende Spalte geschrieben.



  • Die Zeilennummer kann natürlich nur dann angezeigt werden, wenn auch die Debug-Infos bei der Assembly hinterlegt sind, d.h. es eine korrespondierende .pdb-Datei gibt!!!



  • Ich steuere eine fremde Anwendung an. Die Exceptions werden natürlich in der fremden Anwendung generiert und in meiner Anwendung gefangen. Ich brauche die Zeile in meinem Code die die fremde Exception ausgelöst hat. Mein Code befindet sich im Debug Modus. Zu meiner Anwendung gibt es die pdb Datei, weil sie im Debug Modus ist. Die fremde Anwendung liefert nur eine Api, aber keine Debug Infos.

    Aktuell schreibe ich in ein Grid Control der fremden Anwendung Werte hinein und ab und zu greife ich auf Spalten zu die nicht mehr existieren. Da treten die Exceptions auf. Im Catch Stmnt muß ich nun raten in welcher Zeile die E geworfen wurde.



  • Nein musst du nicht.
    Aber du scheinst beratungsresistent zu sein.
    OK, semi-beratungsresistent.

    hustbaer schrieb:

    Es ist oft günstiger den Debugger so einzustellen dass er bei jedem throw stehenbleibt, egal ob das Ding irgendwo gefangen wird oder nicht.



  • Blurry wird mich rächen.



  • Schön dass du selbst einsiehst dass ihr vom selben Schlag seid.



  • Du neigst zu logischen Kurzschlüssen? Der Rächer muß nicht vom gleichen Typ wie der zu Rächende sein.



  • Natürlich nicht.
    In diesem Fall scheint es aber so zu sein.
    Dann hatte ich eben fälschlicherweise angenommen dass auch du das erkannt hast.



  • Hallo,

    für den Fall dass der Catch-Block keine fangende Variable besitzt könnte die Aufrufliste im Visual Studio behilflich sein zumindest grob den Punkt wo die Exception geworfen wurde herauszufinden.


Anmelden zum Antworten