Diferenças entre “buildar” em Debug e em Release

Elemar Júnior

Há alguns dias, falamos sobre problemas enfrentados ao tentar depurar uma aplicação compilada em modo Release. Entretanto, no “mundo real”, o problema que encontramos com mais frequência são sistemas, em produção, compilados em modo Debug.

Nesse post vamos trazer um pouco da diferença entre “buildar” em debug e “buildar” em release.

Diferenças entre compilação em Debug e em Release

A ênfase do compilador, em modo Debug, é gerar o máximo de informações possível para facilitar o trabalho de depuração. Em função disso, poucas otimizações são implementadas tanto no processo de compilação do código-fonte em Intermediate Language, quanto no processo que compila o código em Intermediate Language em binário (pelo JIT).

A informação de stack trace gerada em modo Debug é mais rica. Afinal, os arquivos PDB (Program Database files) são muito mais ricos.

No modo Release, o código é submetido a otimização pelo JIT e muito deste código pode deixar de existir ou pode ser reescrito pelo processo de otimização, consumindo também menos memória em runtime.

IMPORTANTE: Testes de performance SEMPRE devem ser feitos em Release. É comum vermos duas opções de código com diferenças de performance significativas quando compiladas em Debug,  terem o mesmo desempenho quando compiladas em Release.

Algumas palavras sobre .PDB

Program database (PDB) é um formato proprietário (criado pela Microsoft) que armazena informações importantes para depuração de programas. Ele é criado, geralmente, a partir do código-fonte durante o processo de compilação.

O arquivo .PDB contem uma lista de todos os símbolos econtrados em um programa junto com o nome do arquivo e a respectiva linha do código-fonte onde o símbolo foi definido.

Arquivos .PDB não devem, por padrão, ser distribuídos por padrão em ambientes de produção por conter informações demais que podem adicionar um nível extra de vulnerabilidade. Entretanto, eles são muito úteis quando estamos procedendo algum diagnóstico avançado (envolvendo dumps de memória)

Concluindo

Modos Debug e Release  geram códigos executáveis diferentes, com performances diferentes e com propósitos diferentes. Lembre-se de testar sua aplicação compilando seu código em ambos os modos.

Utilize o modo Debug e o modo Release apropriadamente, guarde os arquivos .PDB (gerados no build) para cenários de depuração de erros em produção.

Em posts futuros, iremos falar sobre cenários avançados de depuração – tanto para o ambiente de desenvolvimento, como em produção.

Compartilhe este insight:

Comentários

Participe deixando seu comentário sobre este artigo a seguir:

Subscribe
Notify of
guest
4 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Flávio
Flávio
3 anos atrás

No aspnet core tornou-se mais comum que a compilação em release também gere os arquivos pdbs durante a publicação. Então o melhor a se fazer é armazenar esses arquivos em um lugar seguro acompanhando o versionamento e não enviá-los para o ambiente do cliente?

Tiago Tartari
Tiago Tartari
3 anos atrás

Flávio, obrigado pelo comentário.

Os arquivos .PDBs precisam ficar separados do binário final “onde está publicado”, é uma boa prática.
Geralmente utilizamos um Symbol Server.

Abraços!

Júnior
Júnior
3 anos atrás

Interessante esse artigo. Já vi muitos desses arquivos no servidor de produção e nunca me atentei para isso. Obrigado Elemar.

Elemar Júnior
Elemar Júnior
3 anos atrás

Obrigado. Mas o post é do Tiago Tartari. 🙂

AUTOR

Elemar Júnior
Fundador e CEO da EximiaCo atua como tech trusted advisor ajudando empresas e profissionais a gerar mais resultados através da tecnologia.

NOVOS HORIZONTES PARA O SEU NEGÓCIO

Nosso time está preparado para superar junto com você grandes desafios tecnológicos.

Entre em contato e vamos juntos utilizar a tecnologia do jeito certo para gerar mais resultados.

Insights EximiaCo

Confira os conteúdos de negócios e tecnologia desenvolvidos pelos nossos consultores:

Arquitetura de Dados

Insights de um DBA na análise de um plano de execução

Especialista em performance de Bancos de Dados de larga escala
Arquitetura de Software

Estratégias para modernização do legado

Desenvolvedor .NET/NodeJs e especialista em Kafka com experiência em startups e grandes empresas
Infraestrutura e Nuvem

Migração para a nuvem, mais do que mudança tecnológica, implica em mudança da cultura organizacional

Engenheiro de nuvem, arquiteto de software e especialista em Containers e Devops

Acesse nossos canais

Simplificamos, potencializamos e aceleramos resultados usando a tecnologia do jeito certo

EximiaCo 2022 – Todos os direitos reservados

4
0
Queremos saber a sua opinião, deixe seu comentáriox
()
x

Diferenças entre “buildar” em Debug e em Release

Para se candidatar nesta turma aberta, preencha o formulário a seguir:

Condição especial de pré-venda: R$ 14.000,00 - contratando a mentoria até até 31/01/2023 e R$ 15.000,00 - contratando a mentoria a partir de 01/02/2023, em até 12x com taxas.

Tenho interesse nessa capacitação

Para solicitar mais informações sobre essa capacitação para a sua empresa, preencha o formulário a seguir:

Tenho interesse em conversar

Se você está querendo gerar resultados através da tecnologia, preencha este formulário que um de nossos consultores entrará em contato com você:

O seu insight foi excluído com sucesso!

O seu insight foi excluído e não está mais disponível.

O seu insight foi salvo com sucesso!

Ele está na fila de espera, aguardando ser revisado para ter sua publicação programada.

Tenho interesse em conversar

Se você está querendo gerar resultados através da tecnologia, preencha este formulário que um de nossos consultores entrará em contato com você:

Tenho interesse nessa solução

Se você está procurando este tipo de solução para o seu negócio, preencha este formulário que um de nossos consultores entrará em contato com você:

Tenho interesse neste serviço

Se você está procurando este tipo de solução para o seu negócio, preencha este formulário que um de nossos consultores entrará em contato com você:

× Precisa de ajuda?