segunda-feira, 5 de dezembro de 2011

Integração contínua - Compilar projeto delphi por linha de comando (dcc32) - Recursos Avançados

Olá pessoal. No último post falamos sobre compilar projeto delphi por linha de comando, continuando o assunto, hoje vamos ver como compilar o projeto habilitando opções mais específica de compilação para rodar o projeto em modo de depuração. Nosso projeto de teste utiliza duas bibliotecas externas: FastMM e DUnit, para que o FastMM(em FullDebugMode) consiga captar corretamente o nome das units e métodos onde ocorreram os leaks de memória, é necessário modificar algumas configurações no projeto. Outras ferramentas como o Delphi Code Coverage, utilizam o Map File do executável para analizar a cobertura de código, então também habilitamos a geração do mesmo.

A configuração do projeto nessa caso deveria ficar assim:





Um dos nossos objetivos é automatizar o processo de build sem tem que ficar abrindo a IDE para reconfigurar o projeto, então, a IDE fica configurada no modo de release, digamos assim, e durante o build automatizado nos habilitamos o que for necessário de forma automática.

Só para refrescar a memória, a última compilação que fizemos foi a seguinte:
* -Q: Quiet Compile
* -W-: Warnings off
* -H-: Hints Off

>ExemploDCC32>dcc32.exe -b ExemploDCC32.dpr -Q -W- -H-
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
56 lines, 0.14 seconds, 314356 bytes code, 7433 bytes data.
>ExemploDCC32>

Agora vamos configurar o compilador conforme as opções destacadas nas imagens acima, na sequência em que elas aparecem. Primeiro o Optimization, que é identificado pela diretiva de compilação $O. As diretivas de compilação são ativadas/desativadas com a seguinte sintaxe -$LetraDaDiretiva seguidos de -(desativar) ou +(ativar). Agora podemos concluir que para desativar a diretiva Optimization, devemos incluir o parâmetro -$O-, e assim o faremos.

>ExemploDCC32>dcc32.exe -b ExemploDCC32.dpr -Q -W- -H- -$O-
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
56 lines, 0.14 seconds, 314372 bytes code, 7433 bytes data.
>Build Automatizado\ExemploDCC32>

Se prestarem atenção na saída do console, houve um ligeiro aumento no tamanho do código de 314356 bytes code para 314372 bytes code provando que nossa alteração surtiu efeito.

Seguindo as opções que modificamos, devemos habilitar a opção Stack Frames, que força o compilador a gerar o stack frames para todas as procedures e funções. Esse item também é um diretiva de compilação identificada pela letra W, portanto, devemos acrescentar o parâmetro -$W+. O código desse projeto é muito pequeno para essa alteração causa impacto no tamanho, mais podemos ver que o projeto compilou com sucesso.

>ExemploDCC32>dcc32.exe -b ExemploDCC32.dpr -Q -W- -H- -$O- -$W+
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
56 lines, 0.14 seconds, 314372 bytes code, 7433 bytes data.
>ExemploDCC32>

Já modificamos as duas opções da aba Compiler, agora vamos para a aba Linker, onde temo como primeira opção selecionada a geração do Map file. Há três opções do mesmo:
* Segments: Parâmetro -GS
* Publics: Parâmetro -GP
* Detailed: Parâmetro -GD

A saída do console não é modificada, mais podemos solicitar a listagem do arquivo .map para confirmar sua geração. Observe.

>ExemploDCC32>dcc32.exe -b ExemploDCC32.dpr -Q -W- -H- -$O- -$W+ -GD
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
56 lines, 0.19 seconds, 314372 bytes code, 7433 bytes data.

>ExemploDCC32>dir *.map
 O volume na unidade D não tem nome.
 O número de série do volume é 745C-EA2C

 Pasta ExemploDCC32

15/08/2011  21:18           302.428 ExemploDCC32.map
               1 arquivo(s)        302.428 bytes
               0 pasta(s)  8.627.687.424 bytes disponíveis

>ExemploDCC32>

E por último, vamos habilitar a opção Include TD32 debug info, que faz com que o compilador incluar informações adicionais de debug dentro do executável, tornando o tamanho do executável muito maior. O parâmetro utilizado nesse caso é o -V (Debug Information in EXE) e o executável aqui passou de 365kb para 2.790kb.

>ExemploDCC32>dcc32.exe -b ExemploDCC32.dpr -Q -W- -H- -$O- -$W+ -GD -V
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
56 lines, 0.30 seconds, 314372 bytes code, 7433 bytes data.

>ExemploDCC32>

Note como o tamanho do código não aumentou, apenas o tamanho do executável, e isso também não afeta a performance da aplicação, mas lembrando que os parâmetros apresentados neste post são para usar em modo de desenvolvimento.

Nenhum comentário:

Postar um comentário