2008-10-02 6 views
42

Wenn ich ein C# -Programm debuggen und bekomme eine Ausnahme geworfen (entweder durch Code geworfen oder vom Framework geworfen), stoppt die IDE und bringt mich zu der entsprechenden Zeile in meinem Code .Fortsetzung in Visual Studio-Debugger nach einer Ausnahme

Alles ist gut für jetzt.

Ich drücke dann "F5" um fortzufahren. Von diesem Moment an scheint es, als wäre ich in einer Endlosschleife. Die IDE bringt mich immer zur Ausnahmelinie zurück. Ich muss Shift + F5 (Debugging beenden/beenden Sie das Programm), um seine zu verlassen.

Ich habe mit einigen Kollegen hier gesprochen und sie haben mir gesagt, dass dies irgendwann auch bei ihnen passiert.

Was passiert?

+0

Debugger-Verhalten hängt stark von dem Code ab, den Sie debuggen. Können Sie Ihre Frage so bearbeiten, dass sie ein Codebeispiel enthält und angeben, welche Zeile das beschriebene Verhalten verursacht? –

Antwort

16

Dies liegt daran, dass die Ausnahme nicht behandelt wird und Visual Studio nicht über diese Zeile hinausgehen kann, ohne dass sie in irgendeiner Weise behandelt wird. Einfach gesagt, es ist von Entwurf.

Eine Sache, die Sie tun können, ist, den Ausführungspunkt (gelbe Linie/Pfeil) an einen vorherigen Punkt in Ihrem Code zu ziehen und zu ändern und die Werte im Speicher zu ändern (mit den Visual Studio-Beobachtungsfenstern) eine Ausnahme. Dann starten Sie den Code erneut .

Es ist jedoch eine bessere Idee, die Ausführung zu stoppen und das Problem zu beheben, das die Ausnahme verursacht, oder die Ausnahme ordnungsgemäß zu behandeln, wenn der Wurf nicht erwünscht ist.

Dies kann unbeabsichtigte Folgen haben, da Sie im Wesentlichen einige Code erneut ausführen (nicht die Ausführung zurückspulen).

+3

Ich bekomme die gelbe Linie nicht, stattdessen zeigt sie die grüne Linie mit einem grünen Pfeil an, wo die Ausnahme aufgetreten ist, und ich kann den grünen Pfeil nirgends bewegen. Was mache ich in diesem Fall? –

+0

@Anirudh Goel, das gleiche Problem hier. – Pedro77

+1

Das scheint merkwürdig ... manchmal wollen wir sehen, was passiert, wenn eine unbehandelte Ausnahme ausgelöst wird – mmcrae

3

Sobald Sie eine Ausnahme erhalten Visual Studio (oder welche IDE Sie auch verwenden) wird Sie nicht weiter gehen, wenn die Ausnahme in Ihrem Code behandelt wird.

Dieses Verhalten ist von Entwurf.

2

Eine nicht abgefangene Ausnahme wird Ihre App zum Absturz bringen. Stattdessen hält VS Sie nur bei der nicht abgefangenen Ausnahme. Sie müssen Ihre App beenden oder zurückspulen.

4

Wenn die IDE die fehlerhafte Codezeile unterbricht, wird sie kurz vor dem Ausführen der Zeile gestoppt, die die Ausnahme generiert hat. Wenn Sie fortfahren, wird diese Zeile nur noch einmal ausgeführt und die Ausnahme erneut angezeigt.

Wenn Sie über den Fehler hinausgehen möchten, um zu sehen, was passiert wäre, wenn der Fehler nicht aufgetreten ist, können Sie die gelb hervorgehobene Zeile (die Zeile, die als nächstes ausgeführt wird) nach der nächsten Codezeile nach unten ziehen einen beleidigen. Je nachdem, was die fehlerverursachende Zeile versäumt hat, befindet sich Ihr Programm jetzt möglicherweise in einem Zustand, der andere Fehler verursacht. In diesem Fall haben Sie sich nicht wirklich viel geholfen und sollten Ihren Code möglicherweise so korrigieren, dass die Ausnahme entweder nicht funktioniert Es kommt nicht vor oder wird richtig gehandhabt.

43

Sie haben wahrscheinlich die Option "Abwickeln des Callstack auf nicht behandelte Ausnahmen" in Visual Studio aktiviert. Wenn diese Option aktiviert ist, wird Visual Studio direkt vor der Exception deaktiviert, so dass F5 weiterhin in die gleiche Ausnahme rammt.

Wenn Sie die Option deaktivieren Visual Studio wird bei der Ausnahme zu brechen, aber schlagen F5 wird über diese Linie gehen.

Diese Option ist unter dem Menü WerkzeugeOptionenDebuggenAllgemeine.