Base de Conhecimento

Tratamento de exceções no Delphi

Introdução

O Delphi vem com um excelente debbuger. Para o trabalho regular de desenvolvimento, você pode se virar com o debug integrado. Mas, às vezes, você precisa de informações adicionais para rastrear uma exceção. Felizmente, o ecossistema do Delphi oferece muitas ferramentas para adicionar funcionalidade ao Delphi. Neste artigo, examinaremos quatro ferramentas externas de tratamento de exceções.

As ferramentas

Para essa análise, selecionamos as seguintes ferramentas:

Somente a biblioteca Jedi é gratuita se você quiser usar essas ferramentas em aplicativos comerciais. Você também pode usar o MadExcept para projetos não comerciais. O MemInsight, o MadExcept e o Eurekalog estão todos na mesma faixa de preço, entre € 115 e € 149 por usuário.

Funcionalidade

Uma ótima ferramenta ajuda você, como desenvolvedor, a encontrar e corrigir bugs mais rapidamente. Um bom rastreamento de pilha é essencial para isso. Um rastreamento de pilha é uma visão geral das chamadas na ordem em que ocorreram até o ponto em que seu programa encontra uma exceção. Cada item desse rastreamento de pilha tem informações como o nome do procedimento ou da função, sua localização no código-fonte e o número da linha. Isso torna muito fácil encontrar o local exato em que ocorre uma exceção.

Então, vamos dar uma olhada nas ferramentas disponíveis.

TMS MemInsight

O TMS MemInsight é uma ferramenta relativamente nova, lançada em 2022. É uma ferramenta que o ajuda a visualizar a alocação de memória em tempo de execução, a pilha de chamadas de exceção e a inspeção de thread.

O MemInsight consiste em um componente: TTMSMemInsightProfiler. Você pode colocar esse componente em qualquer formulário ou módulo de dados. A principal diferença em relação às outras ferramentas desta visão geral é que o MemInsight oferece uma visão geral imediata do tempo de execução das estatísticas, das exceções e do status da memória do seu aplicativo, e não apenas após a ocorrência de uma exceção. Isso o torna uma ferramenta útil durante o desenvolvimento.

Não é possível enviar os rastreamentos de pilha automaticamente para um rastreador de bugs ou serviços da Web, o que o torna adequado principalmente para você como desenvolvedor e menos para sistemas de produção.

MadExcept

Ao contrário do MemInsight, a MadExcept não tem componentes visuais que você precise colocar em um formulário ou módulo de dados. Em vez disso, você pode ativar a MadExcept por projeto.

O MadExcept captura exceções depois que elas ocorrem em seu aplicativo. Você pode usar a MadExcept para ocultar quaisquer violações de acesso ou exceções, encaminhar o rastreamento de pilha para ftp, e-mail ou serviço da Web ou exibir um formulário que dê aos usuários a opção de continuar o relatório, enviar ou salvar o relatório de bug. Além disso, arquivos de registro extensos ou relatórios de bugs podem ser armazenados e visualizados com um visualizador separado. Não é possível obter uma visão geral do tempo de execução do uso da memória ou das exceções que ocorreram anteriormente, como no MemInsight.

Eurekalog

O Eurekalog também se concentra em tornar mais fáceis de usar as mensagens de erro ou exceções que possam ocorrer em seu aplicativo. Embora não exista uma versão gratuita e não comercial disponível, o preço é semelhante ao do MadExcept. O MadExcept e o Eurekalog também são muito semelhantes em termos de funcionalidade. No entanto, o Eurekalog tem recursos mais abrangentes para enviar traços de pilha e arquivos de registro para rastreadores de bugs, como Mantis, Jira ou GitHub.

O Eurekalog tem opções mais abrangentes que o MadExcept, embora os dois produtos sejam semelhantes em seus componentes principais. Em detalhes, como localização, o Eurekalog tem mais a oferecer. Por outro lado, para projetos maiores, o MadExcept oferece menos sobrecarga e é mais rápido de compilar.

Jedi Debug

Você pode instalar o Jedi Debug, ou jclDebug, por meio do gerenciador de pacotes GetIt ou por meio de uma instalação manual em https://www.delphi-jedi.org/

O jclDebug não tem, como o MadExcept ou o Eurekalog, um instalador conveniente ou uma maneira fácil de configurar o tratamento de exceções. Em vez disso, é necessário criar e configurar o manipulador de depuração manualmente, por exemplo, na seção de inicialização e finalização do aplicativo.

Como o jclDebug pertence ao projeto de código aberto Jedi, seu uso é gratuito. No entanto, você sacrifica algumas funcionalidades aqui, como a fácil configuração de opções e o encaminhamento automático de relatórios de bugs, incluindo o rastreamento de pilha. Se você quiser flexibilidade total no tratamento de exceções, vale a pena considerar o jclDebug.

Outras ferramentas

Existem outras ferramentas (de código aberto) no mercado, incluindo o DebugEngine. Infelizmente, o DebugEngine não está atualizado e não é mais mantido ativamente. Isso torna arriscado o seu uso em sistemas de produção. Além disso, o FastMM5, por exemplo, só tem suporte para JCL, madExcept e EurekaLog, portanto, eu pessoalmente usaria um desses três para o tratamento de exceções (pronto para produção).

Por fim, algumas ferramentas se concentram mais na detecção de vazamentos de memória, como o Delphi LeakCheck e o FastMM. Essas ferramentas não oferecem suporte ao tratamento de exceções, o que as coloca fora do escopo deste artigo.

Conclusão

A escolha da ferramenta depende de seu objetivo com essas ferramentas. Se quiser ter uma visão direta durante o desenvolvimento do seu aplicativo como desenvolvedor, o TMS Meminsight é muito útil. Com um único componente e sem muita configuração, você pode ter uma visão instantânea das estatísticas, do uso da memória e dos rastreamentos de pilha para exceções.

Se você quiser usar o tratamento de exceções em sistemas de produção, não poderá ignorar o MadExcept e o Eurekalog. Ambos os produtos têm um histórico longo e comprovado, são estáveis e oferecem muitas funcionalidades. A escolha entre o MadExcept e o Eurekalog é pessoal, pois ambos os produtos são uma extensão muito valiosa para obter uma visão melhor de qualquer problema em tempo de execução.

E se você não quiser gastar dinheiro com essas ferramentas, há uma alternativa gratuita e de código aberto, embora você mesmo tenha de desenvolver muitas funcionalidades.

Como você pode ver, há uma solução para cada situação, o que mostra novamente que o ecossistema em torno do Delphi é muito valioso para você como desenvolvedor.

Written by Marco Geuze
Diretor

Contato

Deixe-nos ajudá-lo a realizar seus sonhos.