Różnorodność zadań rozwiązywanych dzisiaj za pomocą komputerów osobistych zapewnia istnienie ogromnego zestawu programów użytkowych. Wygoda pracy z oprogramowaniem w dużej mierze zależy od jego niezawodności, co wyraża się brakiem sytuacji awaryjnych. Jednak wiele programów ulega awarii w najbardziej nieodpowiednim momencie. Czemu?
Mechanizm wyjątków służy do śledzenia i obsługi wyjątkowych, nienormalnych lub błędnych sytuacji, które powstają podczas działania programów komputerowych pod kontrolą nowoczesnych systemów operacyjnych. Wyjątkami mogą być sprzęt (zgłaszany przez procesor) i oprogramowanie (zgłaszany przez samą aplikację lub jakiś zewnętrzny składnik wtyczki).
Niezależnie od typu wyjątek może zostać przechwycony i prawidłowo obsłużony. Nieprzechwycone wyjątki trafiają do głównego programu obsługi biblioteki wykonawczej lub programu obsługi zainstalowanego w systemie operacyjnym. Jeśli tak się stanie, program ulega awarii z komunikatem lub nieprawidłowym oknem zakończenia (w systemie Windows). Jeśli program obsługi systemu operacyjnego nie działał (na przykład został celowo usunięty), program „po cichu ulega awarii”. W ten sposób programy ulegają awarii z powodu wyjątków, których nie można obsłużyć. Przyczyny występowania wyjątków są różne.
W przeważającej większości przypadków programy ulegają awarii z powodu wykonania własnego kodu zawierającego jawne lub niejawne błędy implementacji. Lista możliwych przyczyn sytuacji kryzysowych jest bardzo długa. Są to zarówno klasyczne błędy operacji na liczbach zmiennoprzecinkowych (np. dzielenie przez 0), jak i błędy pracy z pamięcią (odczyt lub zapis poza przestrzenią adresową procesu, dostęp do chronionych stron, zapis do obszaru pamięci tylko do odczytu), stos przepełnienia z powodu nieskończonej rekurencji itp. W takich przypadkach zgłaszane są wyjątki sprzętowe lub wyjątki systemu operacyjnego.
Błędy niejawne obejmują różne przypadki niedostatecznego filtrowania danych wejściowych, brak walidacji wartości wskaźników i wiele innych. Takie niedociągnięcia prowadzą do wyjątkowych sytuacji tylko w niektórych przypadkach.
Błędy implementacyjne można znaleźć również w komponentach zewnętrznych używanych przez aplikację. Na przykład w bibliotekach dynamicznych, które zapewniają niezbędną funkcjonalność lub moduły dodatkowe. Kod programu, który jest niejawnie ładowany do przestrzeni adresowej procesu (na przykład w celu przechwycenia pewnych funkcji API) może również spowodować awarię programu.
Wiele komponentów i bibliotek (na przykład ADO w systemie Windows) używa mechanizmu wyjątków programistycznych jako priorytetu zgłaszania błędów. Brak lub niepełna obsługa wyjątków przez tego rodzaju aplikację może doprowadzić do jej awarii nawet w całkowicie nieszkodliwych sytuacjach (takich jak utrata połączenia z bazą danych).