Diagnósticos e depuração
Verificações em execução, vazamentos, mensagens do compilador, informação de depuração e o AppGuard.
No compilador#
- Mensagens
Erro,AvisoeDica, comarquivo(linha,coluna). Um erro que é um nome do Delphi aponta o nome novo. {$message hint|warning|error|fatal 'texto'}emite as suas, em qualquer posição;erroracumula efatalpara ali. Útil como guarda de compilação:{$message fatal 'T não é um tipo aceito'}dentro de um{$if}.-log[:arquivo]grava o progresso da compilação com hora em cada linha, para achar travamentos e lentidão.FC_TIME=1imprime o tempo de cada etapa.
No programa em execução#
| Recurso | Como liga | O que faz |
|---|---|---|
| Divisão por zero | {$config divcheck on} (padrão) | checagem explícita antes de div/mod, que levanta EDivByZero |
| Faixa | {$config rangechecks on} | confere índices e atribuições a tipos faixa |
| Transbordo | {$config overflowchecks on} | confere estouro de aritmética inteira |
| Origem do vazamento | {$config allocsite on} | 16 bytes na frente de cada bloco com o arquivo(linha) de quem o pediu |
| Relatório de vazamentos | ReportMemoryLeaksOnShutdown := True | no fim do programa, lista o que ficou |
| Exceções de hardware | automático | falhas como divisão por zero viram exceção que o try…except pega |
Depuração com -g#
-g grava um .pdb (CodeView) com o nome de cada rotina, o arquivo e a linha, o que permite a um depurador do Windows mostrar uma pilha legível. A informação de variáveis (locais e globais, com tipo) foi acrescentada em uma segunda fase e cobre o essencial. Não há ainda um depurador passo a passo nas ferramentas da casa.
O aplicativo que não some calado: AppGuard#
Um erro fatal do sistema (violação de acesso, estouro de pilha) que escape de todo tratamento faz o Windows encerrar o processo sem dizer nada: o usuário só vê a janela sumir. Todo aplicativo gerado pelo RAD leva o módulo AppGuard, que mostra o erro numa caixa de mensagem (ou na saída de erro, num aplicativo de console) antes de o processo morrer. Ele não recupera o aplicativo: só garante que o usuário saiba o que aconteceu.
Os testes do compilador#
O compilador tem uma suíte de centenas de programas de teste, positivos (têm de compilar e rodar com a saída esperada) e negativos (têm de ser rejeitados, com a mensagem certa). Os testes positivos são também exemplos executáveis de cada recurso, e boa parte dos exemplos desta documentação nasceu deles.