Compartilhar via


Como: código otimizado de depuração

ObservaçãoObservação

As caixas de diálogo e comandos de menu você vê podem diferir daquelas descritas na ajuda dependendo de suas configurações ativas ou versão.Para alterar as configurações, escolha Import and Export Settings no menu Tools.Para mais informações, consulte Configurações de Visual Studio.

Quando o compilador otimiza o código, ele reposiciona e reorganiza as instruções.Isso resulta em código compilado mais eficiente.Devido esta reorganização, o depurador não pode sempre identificar o código fonte que corresponde a um conjunto de instruções.

Otimização pode afetar:

  • Variáveis locais, que podem ser removidas pelo otimizador ou movidas para locais que o depurador não entende.

  • Posições dentro de uma função, que são alteradas quando o otimizador mescla blocos de código.

  • Nomes de função para quadros na pilha de chamadas, podem estar incorretas se o otimizador mescla duas funções.

Os quadros que você vê na pilha de chamadas são quase sempre corretos, no entanto, supondo que você tenha símbolos para todos os quadros.Os quadros na pilha de chamadas será errados se você tiver corrupção de pilha, se você tiver funções escritas em linguagem assembly, ou se há quadros de sistema operacional sem correspondência símbolos na pilha de chamadas.

Variáveis globais e estáticas são sempre mostradas corretamente.Portanto, é o layout da estrutura.Se você tiver um ponteiro para uma estrutura e o valor do ponteiro está correto, cada variável de membro da estrutura mostrará o valor correto.

Devido essas limitações, você deve depurar usando uma versão não otimizada do seu programa se possível.Por padrão, otimização é desativada na configuração de depuração de um programa do Visual C++ e ativada na configuração de liberação.

No entanto, um bug pode aparecer somente em uma versão otimizada do programa.Nesse caso, você deve depurar o código otimizado.

Para ativar otimização em uma depurar compilação configuração

  1. Quando você cria um novo projeto, selecione o Win32 Debug destino.Use o Win32Debug de destino até que o programa é totalmente depurado e está pronto para construir um Win32 Release destino.O compilador não otimizar o Win32 Debug destino.

  2. Selecione o projeto no Solution Explorer.

  3. No modo menu, clique em Páginas de propriedades.

  4. No Páginas de propriedades diálogo caixa, certifique-se de Debug selecionado na configuração na lista suspensa.

  5. Na visualização de pastas à esquerda, selecione a C/C++ pasta.

  6. Sob o C++ pasta, selecione Optimization.

  7. Na lista propriedades à direita, localize Optimization.A configuração provavelmente diz Disabled (/Od).Choose one of the other options (Minimum Size(/O1), Maximum Speed(/O2), Full Optimization(/Ox), or Custom).

  8. Se você escolheu o Custom opção de Optimization, agora você pode definir opções para qualquer uma das propriedades mostradas na lista de propriedades.

Quando você depurar código otimizado, use o desmontagem janela para ver quais instruções realmente são criadas e executadas.Quando você definir pontos de interrupção, você precisa saber o ponto de interrupção pode mover junto com uma instrução.Por exemplo, considere o seguinte código:

for (x=0; x<10; x++)

Suponha que você definir um ponto de interrupção nesta linha.Você pode esperar o ponto de interrupção seja atingido 10 vezes, mas se o código é otimizado, o ponto de interrupção é atingido apenas uma vez.Porque a primeira instrução define o valor de x a 0.O compilador reconhece que isso só deve ser feita uma vez e move-a para fora do loop.Move o ponto de interrupção com ele.As instruções de comparam e incrementam x permanecem dentro do loop.Quando você exibir o desmontagem janela, o unidade etapa é definida automaticamente como instrução para maior controle, é útil quando você depurar código otimizado.

Consulte também

Conceitos

Segurança do depurador

Outros recursos

Depurando código nativo