quarta-feira, 23 de maio de 2007

Sua Aplicação Cairá ... Mas irá se recuperar ...

Bom dia mais uma vez hj ...

Todos nós programadores já tivemos diversos problemas com alguns erros difíceis de capturar. Nem é preciso dizer o seu nome mas, qual programador já não passou por uma mensagem do tipo ...
Bem, este é o famoso erro de Violação de Acesso, ou Access Violation. Quem nunca compilou uma aplicação e nunca viu um desses erros, que jogem a primeira pedra!!

Os erros de violação de acesso, mais conhecidos pelos seus homônimos em inglês como "Access Violation", "General Protection Fault" (GPF ou para os Win98 users, Blue Screen of Death) e o "Invalid Page Fault". O nome até muda, mas o conceito por trás dos erros é sempre o mesmo. Access Violation é a frase mais comum que usuários de programas feitos em Delphi (e pq não em outras linguagens) veêm quando uma aplicação que eles estão rodando tenta acessar algum recurso que não está designado para seu uso, e trava ;)

Se as aplicações Windows estão autorizadas a escrever fora da área reservada para seu funcionamento, ela pode facilmente sobrescrever outras aplicações, ou mesmo de métodos e dados do próprio sistema operacional. Se isto vir a ocorrer, o sistema operacional poderar travar ou parar de funcionar corretamente em algum ponto da sua execução ou chamadas de alguma das APIs, de modo que somente com uma reinicialização do sistema operacional nós poderíamos ter as coisas funcionando de maneira correta novamente.


Os erros de violação de acesso são os erros mais frustrantes de serem reproduzidos na programação para o Windows (mais especificamente, para o set Win32 das APIs do mesmo sistema, ou seja, do Windows 95 para frente). O propósito deste post é ajudar de alguma forma a resolver de maneira bem rápida este problema que assola nossas aplicações, tanto como desenvolvedores quanto usuários.

Primeiramente, os erros de violação de acesso podem ser divididos em duas categorias principais: erros de hardware e erros de software.

Alguns erros de hardware e software podem acontecer sem nossa intervenção. Por exemplo, é comum em algumas placas-mãe bugadas (pcchips reina soberana), que a tentativa de acesso de algum dispositivo por parte da aplicação nos leve a erros que não podem ser resolvidos com código. Para estes, a solução é a seguinte:

  • Verificar se não está havendo algum conflito de hardware que leve um driver a tentar acessar recursos de outro dispositivo;
  • Verificar se não há algum conflito de IRQ, que faz com que dois dispositivos tentem gerar eventos simultâneamente;
  • E finalmente, manter instalados sempre os drivers mais atuais dos seus dispositivos.
No mais, quanto aos erros de hardware, não há muito o que fazer. No entanto, os erros de software sim. Os erro de software, enquanto estamos desenvolvendo, podem ser divididos em duas categorias principais: erros em tempo de compilação e erros em tempo de execução.

Os princiais erros de violação de acesso em tempo de projeto tem muita relação com o sistema operacional. Por exemplo, aqui no meu trabalho existe um programa que, se a data não estiver setada para "DD/MM/AAAA" o programa simplesmente me gera uma violação de acesso e termina sem nenhuma cerimônia.
A melhor maneira de evitar estes tipos de erros é ...
  • Utilizando o aplicativo preferencialmente no sistema operacional para o qual ele foi desenvolvido ou no caso contrário, usar o aplicativo mais recomendado para o sistema operacional utilizado. Vários problemas podem ocorrer, por exemplo, se você tentar rodar um aplicativo do XP no Windows 9X e até mesmo no 2k... São APIs diferentes e algumas coisas podem ter sido implementadas em versões mais novas dos mesmos.
  • Manter sempre atualizado seu sistema. Alguns erros podem aparecer e desaparecer entre as correções do sistema. As atualizações automáticas do Windows são donas de fazer isto.
  • Manter também sempre atualizados os componentes da aplicação, na medida em que podem ser feitos, claro.
Quanto aos erros em tempo de execução, uma hora dessas eu arranjo tempo para falar deles, pois ele demandam um pouco mais de ... paciência.

Até mais pessoALL, e até o próximo post


Fonte: delphi.about.com
EoF