Esse artigo faz parte da revista Clube Delphi Edição 59. Clique aqui para ler todos os artigos desta edição

Adeus bugs

Tratamento inteligente de exceções

 

Oq ue fazer quando um usuário do seu software entra em contato informando que está com uma mensagem dizendo "Access violation at address ..."?Ou qualquer outra exceção não tratada? Você deve se perguntar: "Onde está aquele

erro que esqueci de tratar?': Quanto tempo levaria para achá-lo? Em qual unit o erro ocorreu,dentre as várias que seu projeto possui? Em que método de qual componente ou objeto isso ocorreu? Algumas vezes o usuário pode informar ainda que a aplicação sempre trava em um determinado processo e não retoma mais. Realmente, é complicado!

Você revisa linhas e linhas, procurando uma "agulha dentro de um palheiro”. E se a aplicação fosse esperta o suficiente para gerar um relatório de erros? Algo que lhe informasse onde, quando e como o erro ocorreu. Essa é a proposta do madExcept, um utilitário para Delphi que permite gerar relatórios de erros customizáveis, agilizando o processo de correção de bugs em aplicações, servindo como ferramenta para bug report (você se lembra daquela tela do Windows XP perguntando se você deseja enviar o relatório de erros para a Microsoft?).

 

Funcionamento do madExcept

o princípio básico do madExcept é sobrescrever o tratamento de exceções do Delphi com uma nova lógica, gerando um relatório com a pilha de chamadas ((ali Stack) com o máximo de detalhes possíveis. Imagine um caso hipotético, bem simples, como o detalhado na Listagem 1, onde efetuamos a divisão de dois valores digitados em Edits.

Se o usuário entrar com algum valor não numérico em qualquer Um dos dois primeiros Edits, uma exceção será gerada (Figura 1). Logicamente, esse caso é bastante simples, mas essas telas aparecem de tempos em tempos conforme lançamos uma versão nova de um produto, abrindo sempre a possibilidade de novos erros e novas reclamações por parte do cliente.

A questão principal é: "Em quanto tempo estará disponível uma correção para esse erro?” Para ter uma idéia aproximada, você deve primeiro saber onde está ocorrendo esse erro. O usuário provavelmente dirá:"Quando eu clico no botão que está escrito Button 1”, mas isso,na maioria das vezes, é insuficiente para identificar a causa real do problema.

Além disso, um erro pode depender de muitas variáveis e situações (versão do sistema operacional, service pack, configuração de hardware e software

etc.). Ficar questionando o usuário sobre tudo isso não seria nada agradável e produtivo. Uma das vantagens do madExcept é capturar todas essas informações automaticamente e incluí-las no bug report (veja um exemplo na Listagem 2).

 

Figura 1.É muito comum acontecerem erros não tratados pelo desenvolvedor

 

Listagem1. Exemplo de código passível de erro

...

Quer ler esse conteúdo completo? Tenha acesso completo