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

Atenção: por essa edição ser muito antiga não há arquivo pdf para download desta revista. os artigos disponíveis somente em doc.

Debugando com Codesite

Conheça uma excelente ferramenta para debugar seu código

Você está desenvolvendo um aplicativo e as coisas não estão correndo como deveriam: o programa não faz o que deveria fazer, você tem muita dificuldade para seguir o código usando o debugger integrado do Delphi, pois os métodos se entrelaçam e eventos são ativados durante a execução,ou mesmo o erro está no meio de uma rotina de reescrita da tela (nesse caso, quando o debugger é ativado
a tela é coberta e a rotina é chamada novamente), ou mesmo sua aplicação é multithreaded, onde diversas tarefas são executadas simultaneamente (por exemplo aplicações Web ou servidores de aplicação DataSnap).

Normalmente, minha primeira opção quando isso acontece é colocar uma chamada para ShowMessage para que a caixa de diálogo mostre o valor da variável. Quando a rotina com erro é chamada diversas vezes, isso é impraticável, pois temos que clicar no botão OK cada vez, além de interromper a execução, escondendo bugs e
introduzindo outros.

Passo então para a segunda opção: criar um arquivo de log, usando WriteLn. Essa opção é mais interessante, pois não interrompe a aplicação e permite mostrar todas as informações que desejo. Esse enfoque funciona até o momento em que as funções começam a se entrelaçar ou quando tenho que enviar informações mais complexas, como uma imagem. Uma solução para esses problemas pode ser o
CodeSite,da Raize Softwar, já premiado como melhor ferramenta de debugging pela revista Delphi Informant.

Introdução ao CodeSite
O CodeSite, que pode ser obtido em www.raize.com, é como um super gerador de arquivos de log, pois permite enviar dados de diversos tipos para o log, inclusive tipos personalizados.O log pode então ser visualizado localmente, no Viewer, gravado num arquivo, para serviste em outro computador ou mesmo enviado para outra máquina. As mensagens podem ser de diversos tipos, sendo mostradas com ícones diferentes, podendo ser filtradas, para esconder mensagens desnecessárias.

Após instalar o CodeSite, basta incluir a unit CodesiteLogging na cláusula uses e usar o método Send, do objeto CodeSite, como:

CodeSite.Send("Teste de mensagem');

Ao executar o programa, duas coisas acontecem: aparece um novo ícone na barra de tarefas, ao lado do relógio: é o CodeSite Dispatcher e a mensagem enviada é mostrada no CodeSite Viewer, como na Figura 1.

O Send é um método sobrecarregado e pode receber diversos tipos como parâmetro. Você pode enviar para o log de mensagens dados de diversos tipos: strings, inteiros, imagens, listas e até dados personalizados(como veremos mais adiante). Você pode incluir na mensagem uma string explicativa e também um tipo de mensagem. Conforme o tipo, a mensagem é mostrada com um ícone diferente no log. O código a seguir envia as mensagens disponíveis no CodeSite. Note que não enviamos a mensagem csmClear, que limpa o Viewer.

var

i: Integer;

begin

for i :- csmFirst to csmLast do
if
l <> csmClear then
Codesite.Send(i, 'Mensagem número", i);

A Figura 2 mostra o log de mensagens após a execução do código.
Muitas dessas mensagens não serão enviadas dessa maneira. Por
exemplo, para enviar um separador ao Viewer, usamos o método Add-
Separator
ou para limpar as mensagens usamos o método Clear.


Usando o CodeSite

O método Send.embora seja muito importante.é apenas parte do que o CodeSite pode fazer. Um recurso muito interessante é o tracing


Figura 1. CodeSite Viewer.

Figura 2. Viewer após enviar as mensagens.

de métodos: coloca-se uma chamada para EnterMethod na entrada de uma função e uma chamada a ExitMethod, na saída dessa. Tudo o que estiver entre as duas chamadas fica endentado no Viewer, permitindo que se visualize o que acontece dentro de um método.Um exemplo é um código recursivo de pesquisa de arquivos
como o código da Listagem 1.

Listagem 1. Exemplo de uso dos métodos EnterMethod e ExitMethod

procedure TForm1.PesquisaArquivos(

    Diret: string; Lista : TStringList);

...

Quer ler esse conteúdo completo? Tenha acesso completo