19 de out. de 2012

Como remover algumas units de seu processo de Debug

Em um post recente da lista de discussão [lista-delphi] do yahoo, alguém perguntou como é possível remover units do processo de debug, principalmente units de terceiros, como por exemplo IBO e DevExpress.

A razão para isso é que o processo de debugar seu código com essas units fica realmente um porre e a melhor coisa é mesmo não ter que passar por essas units.

Uma das formas de fazer isso é incluir a diretiva de compilação {$-D} na unit que você não quer debugar. Isso vai ser mais ou menos simples de se fazer se forem apenas units do seu projeto. Agora, imagine fazer isso com as units da DevExpress ou IBO ou outra biblioteca qualquer.

Apenas remover as units (.pas) também não adianta, pois o Delphi vai procurar por esses arquivos na hora de debugar, já que o EXE contém essas informações de debug.

Uma solução simples pra isso é compilar tudo sem informação de debuger:
  • Vá em Project Options > Compiling > Debugging e desmarque as opções de debug
  • Dê um build all: nesse momento suas DCUS não terão mais a informação de debug.
  • Retire do Search Path/Lib Path as units (*.pas apenas) que vc não quer mais debugar (IBO, DevExpress, etc) 
  • Vá novamente em Project Options > Compiling > Debugging e marque novamente as opções de debug 
  • Dê um Build all (ou vc pode apenas compilar as units que vc quer debugar) 
A partir de agora você poderá debugar tranquilamente sem ter que se preocupar com as units de terceiros.

Veja que a própria IDE aplica essa técnica (Project Options > Compiling > Debugging > Use Debug Dcus) para as units da VCL: na pasta Lib tem DCUs para Debug e Release e a opção "Use Debug Dcus" indica ao linker qual diretório usar na hora de gerar o Executável de seu projeto.

Bom proveito.