Partilhar via


Problemas comuns ao criar um build de lançamento

Durante o desenvolvimento, você geralmente compilará e testará com uma compilação de depuração do seu projeto. Se, em seguida, compilares o teu aplicativo para uma compilação final, poderás enfrentar uma violação de acesso.

A lista abaixo mostra as principais diferenças entre uma compilação de depuração e uma compilação de versão (não depuração). Há outras diferenças, mas a seguir estão as principais diferenças que fariam com que um aplicativo falhasse em uma compilação de versão quando ele funciona em uma compilação de depuração.

Consulte a opção do compilador /GZ (Catch Release-Build Errors in Debug Build) para obter informações sobre como detectar erros de compilação de release nas compilações de depuração.

Estrutura de heap

O layout da heap será a causa de cerca de noventa por cento dos problemas aparentes quando uma aplicação funciona em modo de depuração, mas não em produção.

Quando você cria seu projeto para depuração, você está usando o alocador de memória de depuração. Isso significa que todas as alocações de memória têm bytes de proteção colocados ao seu redor. Esses bytes de proteção detetam uma sobrescrita de memória. Como o layout de heap é diferente entre as versões de lançamento e de depuração, uma sobreposição de memória pode não criar problemas em uma compilação de depuração, mas pode ter efeitos catastróficos em uma compilação de lançamento.

Para obter mais informações, consulte Verificar se há substituição de memória e Usar a compilação de depuração para verificar se há substituição de memória.

Compilação

Muitas das macros MFC e grande parte da implementação MFC mudam quando se compila para a versão final. Em particular, a macro ASSERT não avalia nada em uma compilação de versão, portanto, nenhum código encontrado em ASSERTs será executado. Para obter mais informações, consulte Examinar declarações ASSERT.

Algumas funções são inseridas para aumentar a velocidade na versão final. As otimizações geralmente são ativadas em uma compilação de versão. Um alocador de memória diferente também está sendo usado.

Suporte de ponteiro

A falta de informações de depuração remove o preenchimento do seu aplicativo. Numa compilação de lançamento, ponteiros soltos têm uma maior probabilidade de apontar para memória não inicializada em vez de apontar para informações de depuração.

Otimizações

Dependendo da natureza de certos segmentos de código, o compilador de otimização pode gerar código inesperado. Esta é a causa menos provável de problemas de compilação de versão, mas surge ocasionalmente. Para obter uma solução, consulte Otimizando seu código.

Ver também

Compilações de versão
Corrigindo problemas de compilação de versão