Como: Depurar código otimizado
Este tópico se aplica a:
Edição |
Visual Basic |
C# |
C++ |
Desenvolvedores Web |
---|---|---|---|---|
Express |
Somente nativo |
|||
Padrão |
Somente nativo |
|||
PRO e equipe |
Somente nativo |
Legenda de tabela:
Aplica-se |
|
Não é aplicada |
|
Comando ou comandos oculta por padrão. |
Observação: |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Para alterar as configurações, escolha Import and Export Settings no menu Tools.Para obter mais informações, consulte Configurações do Visual Studio. |
Quando o compilador otimiza o código, ele reposiciona e reorganiza as instruções, resultando 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 removidos pelo otimizador ou movidos para o depurador não entende de locais.
Posições dentro de uma função que foram alteradas quando o otimizador de mescla de blocos de código.
Funcionam nomes de quadros no telefonar pilha, que pode estar incorreta se o otimizador mescla duas funções.
Os quadros que você vê na pilha de chamadas são quase sempre à direita, no entanto, se que você tiver símbolos para todos os quadros.Os quadros na pilha de chamadas será errados se houver corrupção de pilha, se você tem funções escritas em linguagem assembly, ou se não houver sistema operacional quadros sem símbolos correspondentes na pilha de chamadas.
Variáveis global 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 às seguintes limitações do, você deve fazer a depuração usando uma versão não otimizada do seu programa se possível.Por padrão, otimização é desativada na configuração depurar de um programa do Visual C++ e ativada na configuração de versão.
No entanto, às vezes, um bug pode aparecer somente em uma versão otimizada de um programa.Nesse caso, você deve depurar código otimizado.
Para ativar o recurso de otimização do depurar compilação configuração
Quando você criar um novo projeto, selecionar o Win32 Debug destino. Use the Win32Debug target until your program is fully debugged and you are ready to build a Win32 Release target.O compilador não otimizar o Win32 Debug destino.
Selecione o projeto no Solution Explorer.
No menu View, clique em Property Pages.
No Páginas de propriedades caixa de diálogo, certifique-se de Debug está selecionado no Configuração caixa de listagem drop-down.
Na pasta à esquerda, selecionar o C/C++ pasta.
Sob a pasta de C++, selecionar Optimization.
Na lista propriedades no lado direito, 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).
Se você escolheu o Custom opção para Optimization, agora você pode conjunto opções para qualquer uma das propriedades mostradas na lista de propriedades.
Ao depurar código otimizado, examine o Desmontagem janela para ver quais instruções, na verdade, são criadas e executadas.Quando configuração pontos de interrupção, você precisará estar ciente de que o ponto de interrupção pode mover junto com uma instrução.Por exemplo, considere o código a seguir:
for (x=0; x<10; x++)
Suponha que você conjunto um ponto de interrupção nessa 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 somente uma vez.Isso ocorre porque a primeira instrução define o valor de x como 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 que comparam e incrementam x permanece dentro do loop. Quando você visualiza o Desmontagem o janelaunidade de etapa é definida automaticamente como instruções para maior controle, que é útil ao Avançar no código otimizado.