2016-05-06 6 views
3

Facing ein seltsames Problem mit SocketException. Attached Screenshot spricht mehr darüber.Warum geworfen Ausnahme ist nicht korrekt mit catch-Block C#

enter image description here

  1. Warum erster catch-Block die Ausnahme nicht holt, während es wieder ein Socket gemeint ist, ist die Socket und geworfenen Ausnahmen zu fangen.

  2. Warum wird die Kontrolle auf den zweiten Catch-Block gesetzt, der irgendeine Ausnahme abfangen soll?

[Bearbeiten]: Hinzufügen Screenshot im Debug-Modus zu

enter image description here

+6

Aus Neugier, warum Debuggen Sie im Freigabemodus? – user1666620

+0

@CharlesMager Ich hatte den Eindruck, dass, wenn Sie eine Ausnahme wiederholen, sie auf einer höheren Ebene gefangen wird, nicht durch den nächsten Catch-Block des gleichen Versuchs. – user1666620

+0

@ user1666620 Du hast natürlich Recht - Entschuldigung, ich hatte nicht entdeckt wo dein Breakpoint war! –

Antwort

1

Die Ausführung wird nicht den zweiten catch-Block eingeben, wird try-catch offensichtlich, dass die Art und Weise nicht funktioniert, wird die Ausnahme ausgelöst Nach oben auf den Aufrufstack werden alle folgenden catch-Klauseln ignoriert.

Es ist einfach sieht auf diese Weise, weil Sie das Debuggen in Veröffentlichung Modus, der wahrscheinlich keine gute Idee, da die IDE ist wichtig, Debug-Informationen fehlen und daher fälschlicherweise wird stoppt, dass die Ausführung zeigt, wenn die zweite catch Klausel eingeben.

Beachten Sie, dass das Anhalten an diesem Punkt wirklich keinen Sinn macht, wenn die Ausführung es irgendwie in die zweite catch Klausel brachte, würde es bei der throw Anweisung anhalten, nicht vorher.

Um es kurz zu machen, was wirklich los ist ist, dass die Ausführung auf der ersten throw Halt macht und die IDE es nicht richtig zeigt.

Moral der Geschichte; debuggen Sie nicht in Release Modus. Wenn Sie VS2015 laufen lassen, warnt es Sie tatsächlich, dass Debugging-Erfahrung in Release Modus subpar wird (nicht sicher, ob diese Warnung in früheren Versionen angezeigt wurde).

UPDATE: Es scheint, das Problem nicht zu Debuggen in Veröffentlichung Modus verwendet ist, wie es in Debug Modus immer noch geschieht. Dennoch, der Punkt steht, dass das Debuggen nicht in Release Mode als funky Zeug wie dies geschehen kann. Ich würde versuchen, die Lösung zu säubern und zu sehen, ob das das Problem löst. Wenn nicht, würde ich es nicht schwitzen, der Code verhält sich richtig, es ist nur eine Frage der IDE, die nicht korrekt anzeigt, wo die Ausführung stockt, keine große Sache.

+0

Das Gleiche passiert im Debug-Modus.Screenshot im Debug-Modus auch hinzugefügt – 107

+0

@ Praveen107 reinigen Sie Ihre Lösung, die IDE zeigt einfach die falsche Position, aber Ihr Code verhält sich korrekt. – InBetween

+0

@ Praveen107 Außerdem habe ich verstanden, dass die * Debug * Build-Einstellungen nicht bearbeitet wurden? – InBetween