Czym dokładnie jest wyjątek pierwszej szansy? Jak i skąd się bierze w programie .NET? I dlaczego nazywa się go tą osobliwą nazwą (o jakiej „szansie” mówimy)?
Czym dokładnie jest wyjątek pierwszej szansy? Jak i skąd się bierze w programie .NET? I dlaczego nazywa się go tą osobliwą nazwą (o jakiej „szansie” mówimy)?
Odpowiedzi:
To koncepcja debugowania. Zasadniczo wyjątki są wysyłane najpierw do debugera, a następnie do rzeczywistego programu, gdzie jeśli nie są obsługiwane, są wysyłane do debugera po raz drugi , dając ci szansę zrobienia czegoś z nim w swoim IDE przed i po samej aplikacji. Wygląda na to, że jest to wynalazek Microsoft Visual Studio.
catch
na to, kontrola idzie tam. Jeśli nie ma catch
bloku, pojawia się przerwa „drugiej szansy”, tym razem komunikat jest Nieobsłużony wyjątek typu „foo” wystąpił w pliku YourApp.exe . Od tego momentu próba kontynuowania lub pójścia dalej nie powiedzie się.
Powiadomienia o wyjątkach pierwszej szansy są generowane, gdy zostanie zgłoszony wyjątek. Powiadomienia drugiej szansy pojawiają się, gdy nie zostanie złapany. (Szansa - jak w przypadku możliwości włamania się do kodu w debugerze).
Właśnie zacząłem używać debuggera i wpadłem na to. Podczas moich badań znalazłem wpis na blogu MSDN Co to jest wyjątek pierwszej szansy? to wyjaśniło to dla mnie.
Najważniejsze wnioski z tego posta na blogu są takie, że odnosi się on do powiadomienia debuggera, a nie do czegoś, co mój kod musiałby koniecznie obsługiwać, a co najważniejsze: „Komunikaty o wyjątkach pierwszej szansy najczęściej nie oznaczają, że jest problem w kod."
Kiedy aplikacja jest debugowana, debugger jest powiadamiany o każdym napotkaniu wyjątku. W tym momencie aplikacja zostaje zawieszona, a debugger decyduje, jak obsłużyć wyjątek. Pierwsze przejście przez ten mechanizm nazywa się wyjątkiem „pierwszej szansy”.
W zależności od konfiguracji debugera albo wznowi aplikację i przekaże wyjątek, albo pozostawi aplikację zawieszoną i przejdzie w tryb debugowania. Jeśli aplikacja obsługuje wyjątek, nadal działa normalnie.
Komunikaty o wyjątkach pierwszej szansy najczęściej nie oznaczają, że w kodzie jest problem. W przypadku aplikacji / komponentów, które z wdziękiem obsługują wyjątki, komunikaty o wyjątkach pierwszej szansy informują programistę, że napotkano wyjątkową sytuację i została ona obsłużona.
Z punktu widzenia programisty bardziej dotyczy to wyjątku drugiej szansy, ponieważ oznaczałoby to, że nie został on obsłużony w kodzie ; dlatego aplikacja zostanie zatrzymana.
Pierwsza szansa może być wielu z nich, ale te, o które należy się martwić, znowu, z punktu widzenia programowania, to druga szansa, ponieważ doprowadziłoby to do awarii aplikacji.
finally
uruchomieniem jakichkolwiek bloków. Gdy system zdecyduje, kto złapie wyjątek (i określi, że ktoś rzeczywiście to zrobi), rozpocznie rozwijanie stosu. Zauważ, że jeśli wyjątek zostanie wyrzucony zfinally
bloku ...