(ang. exception) – zdarzenie zachodzące w systemie w momencie wystąpienia jakiegoś błędu zarówno w software jak i hardware. Najbardziej znanym tego objawem jest komunikat informujący nas, że nastąpił wyjątek i w razie powtórzenia się błędu powinniśmy się skontaktować z sprzedawcą. Tak naprawdę to system podejmuje dość skomplikowane działania, aby uniknąć zawieszenia: procesor przekazuje sterowanie nad błędnym programem do systemu, ten dwukrotnie poszukuje debuggera, aby mu oddać zarząd nad programem, zaś jeśli go nie znajdzie to usiłuje znaleźć w programie funkcje będące obsługą wyjątków. Funkcje te można zaimplementować dla każdego wątku programu poprzez wpis pod adres fs:00000000(+4)
, lub bezpośrednio dla całego procesu za pomocą funkcji API SetUnhandledExceptionFilter. Ich zasadniczym zadaniem jest niedopuszczenie do niekontrolowanego zakończenia programu – próbują one utrzymać go w działaniu, a jeśli jest to niemożliwe wówczas dealokują całą zajętą przezeń pamięć i zamykają program zwalniając wszystkie zasoby i ewentualnie zapisując ważne informacje, które w normalnych warunkach (tj. gdyby Windows obsłużył wyjątek) byłyby utracone. Najczęściej występującymi wyjątkami są: błąd strony (page fault) czy GPF (general protection failure) natomiast jeśli chodzi o wyjątki sprzętowe to choćby: division by zero (dzielenie przez 0).