O que causa erros de exceção fatal e falhas de página inválida?

"Quando programas como o Microsoft Word ou o Excel "travam", o que houve de errado e o que pode ter causado esta falha?"

4ae73c9
Por Jean Carlos
18 jun, 2009

2 minutos de leitura

0

Aggregate score based on 0 reviews

Quando programas como o Microsoft Word ou o Excel “travam”, isso significa que algo de errado aconteceu durante a execução do programa. O sistema operacional frequentemente reconhece que há um problema grave e desativa de forma regular o aplicativo que cometeu esse erro. Ao desativar o aplicativo, o sistema operacional mostrará uma mensagem como “erro de exceção fatal” (e freqüentemente irá exibir uma ampla coleção de números hexadecimais totalmente inúteis para você, usuário, mas que podem ser de muita utilidade para o programador original). A outra forma de um programa travar é levar o sistema operacional junto, o que significa que você deve reinicializar o computador.

Embora não haja nada que você possa fazer com essas mensagens de erro enigmáticas, pode ser interessante pelo menos saber o que elas significam. A seguir, vamos examinar as três mais comuns.

Erro de exceção fatal – um programa de aplicativo como o Microsoft Word é composto por muitas camadas e componentes. Há o sistema operacional, uma camada de serviços do sistema operacional, talvez uma camada encapsuladora além dos serviços do sistema, centenas de bibliotecas de software, bibliotecas e DLLs com função/classe interna e, finalmente, a camada do aplicativo principal. Os sistemas e linguagens operacionais mais modernos (como C++, Java, etc.) suportam conceitos de programação conhecidos como exceções e manuseio de exceções. Exceções permitem que camadas diferentes comuniquem problemas umas às outras. Por exemplo, digamos que um programa precisa de um pouco de memória, então ele pede ao sistema operacional para reservar um bloco de memória. Se o sistema operacional não conseguir atender a solicitação por memória (seja porque o bloco requisitado é muito grande, porque o sistema está com pouca memória disponível ou por qualquer outra razão), ele irá alegar uma “exceção de memória” até a camada que fez a solicitação. Várias camadas podem continuar a mandar esta exceção para cima. Em algum ponto da linha, uma das camadas precisa “captar a exceção” e lidar com o problema. O programa precisa dizer “Nossa, esse sistema está sem memória. Preciso informar isso ao usuário”. Se o programa não conseguir captar a exceção (porque por alguma razão o programador nunca escreveu o código para lidar com aquela determinada exceção), a exceção sobe até a camada superior de todas as camadas e o sistema operacional a reconhece como uma “exceção com a qual não foi possível lidar”. Então, o sistema operacional fecha o programa. Softwares bem projetados lidam com todas as exceções.

Falha de página inválida – um programa utiliza a memória (RAM) para armazenar dados. Por exemplo, ao carregar um documento no Microsoft Word, grandes partes do arquivo que você está editando ocupam espaço na RAM. Conforme o programa precisa de memória, ele solicita blocos de memória de tamanhos específicos do sistema operacional. O programa se lembra da localização de cada bloco que aloca utilizando um “ponteiro”. Se o programa tentar gravar dados em um local além do fim de um bloco de memória ou se o programa se confundir e tentar acessar um bloco de memória inexistente utilizando um ponteiro inválido, o sistema operacional pode ver isso ocorrendo e gera um “falha de página” ou uma “falha de segmentação”. O sistema operacional desativa o programa porque deduz que o programa não sabe o que está fazendo.

Operação ilegal – um microprocessador tem um número finito de instruções. Ele as entende e cada instrução é representada por um número chamado de “código operacional”. O código operacional 43 pode significar “adicionar”, o código operacional 52 pode significar “multiplicar”, etc. Se o microprocessador estiver executando um programa e chegar a um código operacional que não reconhece ou que não pode executar devido a seu estado atual, então o microprocessador pára para reclamar. O sistema operacional lida com essa reclamação desativando o programa ofensor. Os códigos operacionais ilegais normalmente vêm de softwares que vão para um local na memória que não contém informações válidas do programa.

Todos esses problemas são causados por erro por parte do programador.  Algumas vezes, a causa-raiz é incompetência ou inexperiência, mas em muitos casos é a complexidade dos programas atuais. Há centenas de exceções e, freqüentemente, milhões de blocos de memória que um programa gerencia em um ambiente complexo e cheio de camadas. Um movimento em falso e o aplicativo trava – o software é muito frágil.

Categorias

Comentários