A variedade de tarefas resolvidas hoje com a ajuda de computadores pessoais é proporcionada pela existência de um enorme conjunto de programas aplicativos. A conveniência de trabalhar com o software depende muito de sua confiabilidade, que se expressa na ausência de situações de emergência. No entanto, muitos programas travam no momento mais inoportuno. Por quê?
O mecanismo de exceção é usado para rastrear e tratar situações especiais, anormais ou errôneas que surgem durante a operação de programas de computador sob o controle de sistemas operacionais modernos. As exceções podem ser hardware (lançado pelo processador) e software (lançado pelo próprio aplicativo ou algum componente externo do plug-in).
Independentemente do tipo, a exceção pode ser capturada e tratada corretamente. As exceções não detectadas vão para o manipulador da biblioteca de tempo de execução raiz ou um manipulador instalado pelo sistema operacional. Se isso acontecer, o programa trava com uma mensagem ou uma janela de encerramento anormal (no Windows). Se o manipulador do sistema operacional não funcionar (por exemplo, foi deliberadamente removido), o programa "trava silenciosamente". Assim, os programas travam devido a exceções que não podem ser tratadas. Os motivos para a ocorrência de exceções são diferentes.
Na esmagadora maioria dos casos, os programas travam devido à execução de seu próprio código contendo erros de implementação explícitos ou implícitos. A lista de possíveis causas de emergências é muito longa. Esses são erros clássicos de operações em números de ponto flutuante (por exemplo, divisão por 0) e erros de trabalho com memória (leitura ou gravação fora do espaço de endereço do processo, acesso a páginas protegidas, gravação em uma área de memória somente leitura), estouro de pilha devido à recursão infinita, etc. Nesses casos, exceções de hardware ou exceções de sistema operacional são lançadas.
Os erros implícitos incluem vários casos de filtragem insuficiente de dados de entrada, falta de validação de valores de ponteiro e muito mais. Essas deficiências conduzem a situações excepcionais apenas em certos casos.
Erros de implementação também podem ser encontrados em componentes externos usados pelo aplicativo. Por exemplo, em bibliotecas dinâmicas que fornecem a funcionalidade necessária ou módulos complementares. O código do programa que é carregado implicitamente no espaço de endereço de um processo (por exemplo, para interceptar certas funções da API) também pode causar o travamento do programa.
Muitos componentes e bibliotecas (por exemplo, ADO no Windows) usam o mecanismo de exceção programática como uma prioridade para relatar erros. A ausência ou tratamento incompleto de exceções por esse tipo de aplicativo pode levar ao seu travamento, mesmo em situações totalmente inofensivas (como perda de conexão com o banco de dados).