Depuração
Tópicos Avançados
Quem nunca utilizou um ShowMessage para mostrar o valor de uma variável em um bloco de código? Ou, ao menos, para sinalizar que determinado trecho foi executado? Em algumas situações complexas, chegamos ao ponto de querer mudar a estrutura de um algoritmo apenas para a visualização de dados relevantes.
Contudo, sabemos que desde sua primeira versão, o Delphi sempre esteve à frente no tocante ao seu ambiente integrado de debug. É muito importante um bom conhecimento desse recurso, pois, quando bem sucedida, uma operação de depuração pode apontar diversos pontos de falha e até gargalos no sistema.
Veremos como utilizar todos os recursos de depuração do ambiente, dos mais básicos aos mais avançados, incluindo as configurações. Assim, o desenvolvedor poderá conhecer a fundo técnicas e funções raramente utilizadas, porém muito úteis e que podem fazer a diferença na hora de se resolver um problema. Vale lembrar que muitos dos recursos aqui apresentados estão disponíveis para Delphi 7 e versões anteriores, as novidades do Delphi 2005/2006 serão indicadas no texto.
Configurando e entendendo o ambiente
Ao depurarmos nosso programa, não devemos de forma alguma alterar o código já existente. A menos que seja realmente detectada uma falha. Do contrário, além de estarmos afetando a compreensão do algoritmo, poderemos influenciar o resultado desejado. Se contarmos com um ambiente de depuração, devemos confiar a ele o trabalho de nos mostrar o que acontece nos bastidores. Todavia, existem raras exceções a essa regra. Deixemos isso de lado por um instante.
O estudo das configurações de depuração começa no diálogo Options (Tools>Options) do Delphi 2005 (Figura 1). Na seção Debugger Options, podemos facilmente configurar as principais opções globais do depurador.
Figura 1. O diálogo Options do Delphi
O mais importante aqui é saber que é possível ativar/desativar a depuração integrada, fazendo com que o programa seja sempre executado sem o link com o depurador (opção Integrated debugging); durante o processo de debug, transformar os editores em read-only, impedindo a modificação do código (Mark buffers read-only on run); e reorganizar o menu do editor principal, facilitando a localização das debug tools (Rearrange editor local menu on run).
Nota: Todas as opções aqui configuradas são independentes do projeto ativo.
Uma outra opção interessante é encontrada na seção Language Exceptions e se chama Notify on language exceptions. Até o Delphi 8, essa opção se chamava Stop on Language Exceptions, devido a algumas mudanças no tratamento das exceções disparadas pelo executável que está sendo depurado. Nas versões anteriores, quando uma exceção era disparada, o depurador pausava a execução do programa até que a sua continuação fosse solicitada.
Por essa opção não ser sempre desejada pela maioria dos desenvolvedores, muitos optavam por desativar temporariamente o tratamento de exceções pelo depurador ou, até mesmo, desativar a depuração integrada. Uma solução mais elegante seria utilizar breakpoints para tal fim, o que será visto adiante. Mesmo assim, as novas versões do Delphi optaram por facilitar a vida dos desenvolvedores, adicionando duas novas funcionalidades ao IDE: o Run without debugging e o Debugger Exception Notification.
Diversas vezes queremos testar apenas a execução do programa sem linká-lo ao depurador. Para tanto, podemos utilizar uma função introduzida no Delphi 8, a Run>Run Without Debugging.
A janela Debugger Exception Notification aparece a cada vez que uma exceção é disparada e tratada pelo depurador (Figura 2).
Figura 2. A janela Debugger Exception Notification
Nossas opções são:
· Break: Para pausar a execução e mostrar o código (como anteriormente);
" [...] continue lendo...