2010-09-21 13 views
16

Identycznie jak "How do exceptions work (behind the scenes) in C++", ale dla C#.Jak działają wyjątki (za kulisami) w języku C#

Wiem, że poniższe kroki muszą zostać wykonane po zgłoszeniu wyjątku.

  1. Znajdź najbliższy program obsługi typu wyjątku;
  2. Odwiń stos do poziomu obsługi;
  3. Zadzwoń do obsługi;
  4. Znajdź i zadzwoń do każdego bloku finally.

W jaki sposób .NET obsługuje te operacje? Jak działa mapowanie dla "bieżących" procedur obsługi? Ile kodu jest wysyłanych w bloku try/catch? A w bloku do rzucania?

+3

Przegapiłeś parę kroków, co najmniej: zobaczyć, czy są jakieś filtry wyjątków zainstalowany (dostają zaangażowane przed połowu bloki) i wykonać dowolne bloki w końcu, gdy stack się rozwija. –

+0

Rzeczywiście, zapomniałem o blokach w końcu. Pozwól mi to poprawić. – jpbochi

Odpowiedz

3

Wyjątki .NET wykorzystują implementację strukturalnej obsługi wyjątków strukturalnych systemu Windows, chociaż jest to wymóg określony jako , a nie. Mono może zrobić to inaczej.

W rzeczywistości, jeśli napiszesz jednolinową aplikację konsoli, która właśnie zgłasza wyjątek, a następnie uruchamia ją w Windbg, zobaczysz hak w niezarządzanej obsłudze wyjątków.

+0

Czy możesz podać jakieś konkretne odniesienie do implementacji Mono, chcę się o tym dowiedzieć. – Maniero

+0

@Maniero Nie wiem nic o implementacji Mono. –

Powiązane problemy