De verscheidenheid aan taken die tegenwoordig met behulp van personal computers worden opgelost, wordt geleverd door het bestaan van een enorme reeks toepassingsprogramma's. Het gemak van het werken met de software hangt grotendeels af van de betrouwbaarheid, die tot uiting komt in de afwezigheid van noodsituaties. Veel programma's crashen echter op het meest ongelegen moment. Waarom?
Het uitzonderingsmechanisme wordt gebruikt om speciale, abnormale of foutieve situaties op te sporen en af te handelen die zich voordoen tijdens de werking van computerprogramma's onder controle van moderne besturingssystemen. Uitzonderingen kunnen hardware (verworven door de processor) en software (verworpen door de applicatie zelf of een externe plug-in component) zijn.
Ongeacht het type kan de uitzondering worden opgevangen en correct worden afgehandeld. Niet-gevangen uitzonderingen gaan naar de root-runtime-bibliotheekhandler of een door het besturingssysteem geïnstalleerde handler. Als dit gebeurt, crasht het programma met een bericht of een abnormaal beëindigingsvenster (in Windows). Als de handler van het besturingssysteem niet werkte (deze is bijvoorbeeld opzettelijk verwijderd), crasht het programma "stil". Programma's crashen dus vanwege uitzonderingen die niet kunnen worden afgehandeld. De redenen voor het optreden van uitzonderingen zijn verschillend.
In de overgrote meerderheid van de gevallen crashen programma's als gevolg van de uitvoering van hun eigen code die expliciete of impliciete implementatiefouten bevat. De lijst met mogelijke oorzaken van noodsituaties is erg lang. Dit zijn zowel klassieke bewerkingsfouten op drijvende-kommagetallen (bijvoorbeeld delen door 0), als fouten bij het werken met geheugen (lezen of schrijven buiten de procesadresruimte, toegang tot beveiligde pagina's, schrijven naar een alleen-lezen geheugengebied), overloopstapel als gevolg van oneindige recursie, enz. In deze gevallen worden hardware-uitzonderingen of besturingssysteemuitzonderingen gegenereerd.
Impliciete fouten omvatten verschillende gevallen van onvoldoende filtering van invoergegevens, gebrek aan validatie van aanwijzerwaarden en nog veel meer. Dergelijke tekortkomingen leiden slechts in bepaalde gevallen tot uitzonderlijke situaties.
Implementatiefouten kunnen ook worden gevonden in externe componenten die door de applicatie worden gebruikt. Bijvoorbeeld in dynamische bibliotheken die de nodige functionaliteit bieden of add-on modules. Programmacode die impliciet in de adresruimte van een proces wordt geladen (bijvoorbeeld om bepaalde API-functies te onderscheppen) kan er ook voor zorgen dat het programma crasht.
Veel componenten en bibliotheken (bijvoorbeeld ADO op Windows) gebruiken het programmatische uitzonderingsmechanisme als prioriteit voor het melden van fouten. De afwezigheid of onvolledige afhandeling van uitzonderingen door dit soort toepassingen kan leiden tot een crash, zelfs in volledig ongevaarlijke situaties (zoals verlies van verbinding met de database).