Was ist eine Ausnahme der ersten Chance?


Antworten:


77

Es ist ein Debugging-Konzept. Grundsätzlich Ausnahmen sind mit dem Debugger geworfen erst und dann auf das eigentliche Programm , wo , wenn es nicht behandelt wird es an die Debugger ein geworfen wird zweites Mal, Ihnen gibt Gelegenheit , etwas mit ihm in Ihren IDE vor und nach der Anwendung selbst zu tun. Dies scheint eine Erfindung von Microsoft Visual Studio zu sein.


21
Es ist mehr als ein Debugging-Konzept. C # bietet keine bequeme Möglichkeit, die Ausnahmebehandlung mit zwei Durchläufen zur Laufzeit zu beobachten, vb.net jedoch. Wenn eine Ausnahme ausgelöst wird, beginnt die Laufzeit im Grunde damit, den Aufrufstapel zu durchsuchen, um herauszufinden, wer sie abfangen wird. Dieser Prozess erfolgt , bevor alle finallyBlöcke ausgeführt werden . Sobald das System entschieden hat, wer eine Ausnahme abfangen wird (und festgestellt hat, dass tatsächlich jemand eine Ausnahme abfangen wird), beginnt das System, den Stapel abzuwickeln. Beachten Sie, dass, wenn eine Ausnahme von einem finallyBlock ausgelöst wird ...
Supercat

17
... der Code, der erwartet hatte, die ursprüngliche Ausnahme abzufangen, dies möglicherweise nicht tut; Es gibt viele seltsame Eckfälle.
Supercat

5
Dies geschieht, wenn Sie den Debugger so konfiguriert haben, dass alle ausgelösten Ausnahmen (nicht nur nicht behandelte Ausnahmen) unterbrochen werden, oder wenn Sie in eine Anweisung "eintreten", die ausgelöst wird. Sie sehen die Meldung In YourApp.exe ist eine erste zufällige Ausnahme vom Typ 'foo' aufgetreten . Sie können weiterhin fortfahren (F5) oder weitergehen (F11). Wenn es dafür ein catchgibt, geht die Kontrolle dorthin. Wenn kein catchBlock vorhanden ist, wird die Unterbrechung "zweite Chance" angezeigt . Diesmal lautet die Meldung " Eine nicht behandelte Ausnahme vom Typ" foo "ist in YourApp.exe aufgetreten . Von hier aus wird der Versuch, fortzufahren oder weiterzugehen, nicht erfolgreich sein.
Jeppe Stig Nielsen

@supercat: Wie erfahre ich von den Details, die Sie oben in Ihren Kommentaren erwähnt haben? Ist es ein Ergebnis von Selbstversuchen? Bücher lesen (welches)? Das ist eine sehr beeindruckende Einsicht! Ich würde mich
freuen,

2
@NoSaidTheCompiler: Ich habe in verschiedenen Blogs über die Ausnahmebehandlung gelesen. Ich würde erwarten, dass bei der Suche nach "Ausnahmefilter .net" einige Blogs zu diesem Thema auftauchen.
Supercat


4

Ich habe gerade angefangen, den Debugger zu verwenden, und bin darauf gestoßen. Bei meinen Recherchen habe ich den MSDN-Blogbeitrag gefunden. Was ist eine Ausnahme der ersten Chance? das hat es für mich geklärt.

Die großen Erkenntnisse aus dem Blog-Beitrag sind für mich, dass es sich um eine Benachrichtigung an den Debugger handelt und nicht um etwas, das mein Code unbedingt verarbeiten müsste, und vor allem: "Ausnahmemeldungen der ersten Chance bedeuten meistens nicht, dass es ein Problem in der gibt." Code."


Bitte fügen Sie einen Auszug ( nicht den gesamten Artikel ) dessen hinzu, was Sie über diesen Link hilfreich fanden. Es gab eine frühere Linkantwort nur mit demselben Link, der gelöscht wurde.
Mark Hall

Die großen Vorteile für mich sind, dass es sich um eine Benachrichtigung an den Debugger handelt und nicht um etwas, das mein Code unbedingt verarbeiten müsste, und vor allem: "Ausnahmemeldungen der ersten Chance bedeuten meistens nicht, dass es ein Problem im Code gibt."
Codingatty

Ich habe Ihren Kommentar zu Ihrer Antwort hinzugefügt. Ich bin der Meinung, dass der Link wichtig genug ist, um in der Nähe zu bleiben. Ich versuche sicherzustellen, dass er nicht als reine Linkantwort wie beim vorherigen Mal betrachtet wird.
Mark Hall

0

Wenn eine Anwendung debuggt wird, wird der Debugger benachrichtigt, wenn eine Ausnahme auftritt. Zu diesem Zeitpunkt wird die Anwendung angehalten und der Debugger entscheidet, wie die Ausnahme behandelt wird. Der erste Durchgang durch diesen Mechanismus wird als "First Chance" -Ausnahme bezeichnet.

Abhängig von der Konfiguration des Debuggers wird entweder die Anwendung fortgesetzt und die Ausnahme weitergeleitet, oder die Anwendung wird angehalten und in den Debug-Modus versetzt. Wenn die Anwendung die Ausnahme behandelt, wird sie normal weiter ausgeführt.

Ausnahmemeldungen der ersten Chance bedeuten meistens nicht, dass ein Problem im Code vorliegt. Bei Anwendungen / Komponenten, die Ausnahmen ordnungsgemäß behandeln, teilen Ausnahmemeldungen der ersten Chance dem Entwickler mit, dass eine Ausnahmesituation aufgetreten ist und behandelt wurde.


0

Aus Entwicklersicht handelt es sich eher um eine Ausnahme der zweiten Chance, da dies bedeuten würde, dass sie nicht im Code behandelt wurde . daher würde die Anwendung aufhören.

Die erste Chance könnten viele von ihnen sein, aber diejenigen, die sich aus entwicklungspolitischer Sicht um mehr kümmern, sind die zweite Chance, da dies zu einem Absturz der Anwendung führen würde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.