Fenner
Compilador

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, Aviso e Dica, com arquivo(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; error acumula e fatal para 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=1 imprime o tempo de cada etapa.

No programa em execução#

RecursoComo ligaO 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 vazamentosReportMemoryLeaksOnShutdown := Trueno fim do programa, lista o que ficou
Exceções de hardwareautomáticofalhas 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.