Compartilhar via


Alterações de código suportadas (C++)

Editar e Continuar em projetos C++ trata a maioria dos tipos de alterações de código. Porém, algumas alterações não podem ser aplicadas durante a execução do programa. Para aplicar essas alterações sem suporte, você deverá parar a execução e criar uma versão atualizada do código.

Consulte Editar e Continuar (C++) para obter informações sobre como trabalhar com Editar e Continuar para C++ no Visual Studio.

Requisitos

Configurações de build (Propriedades do projeto > ):

  1. C/C++ > Formato geral > de informações de depuração: Banco de Dados do Programa para Editar e Continuar (/ZI)

  2. Vinculador > Geral > Habilitar Vinculação Incremental: Sim (/INCREMENTAL)

    Qualquer configuração de vinculador incompatível (como /SAFESEH ou /OPT:...) deve causar aviso LNK4075 durante a compilação.
    Exemplo: LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification

Configurações do depurador (Opções > Depuração > Geral):

  • Habilita o Editar e Continuar Nativo

    Qualquer configuração de compilador ou vinculador incompatível causa um erro durante Editar e Continuar.
    Exemplo: Edit and Continue : error : ‘file.cpp’ in ‘MyApp.exe’ was not compiled with Edit and Continue enabled. Ensure that the file is compiled with the Program Database for Edit and Continue (/ZI) option.

Alterações sem suporte

As seguintes alterações de C/C++ não podem ser aplicadas durante uma sessão de depuração. Se você executar qualquer uma destas alterações e tentar aplicar alterações de código, um erro ou uma mensagem de aviso serão exibidos na janela de Saída.

  • A maioria das alterações aos dados globais ou estáticos.

  • As alterações nos executáveis que são copiados de outro computador e não são criados localmente.

  • As alterações para um tipo de dados que afeta o layout de um objeto, como, por exemplo, membros de dados de uma classe.

  • Adicionando mais de 64k bytes do novo código ou dados.

  • Adicionando variáveis que exigem um construtor em um ponto antes do ponteiro de instrução.

  • As alterações que afetam o código que exigem a inicialização de tempo de execução.

  • Adicionar manipuladores de exceção, em alguns casos.

  • Alterações aos arquivos de recurso.

  • Alterações ao código em arquivos somente leitura.

  • Alterações ao código sem um arquivo PDB correspondente.

  • Alterações ao código que não tem arquivo de objeto.

  • Modificando lambdas que:
    • Têm um membro estático ou global.
    • São passados para std::function Isso causa uma violação ODR genuína e resulta em C1092.
  • Editar e Continuar não atualiza bibliotecas estáticas. Se você fizer uma alteração em uma biblioteca estática, a execução continuará com a versão antiga e nenhum aviso será emitido.

Cenários sem suporte

Editar e Continuar para C/C++ está indisponível nos seguintes cenários de depuração:

  • Depurando aplicativos nativos compilados com /Zo (aprimorar a depuração otimizada)

  • Projetos que usam o conjunto de ferramentas VC 120 e a opção /bigobj do C/C++. Editar e Continuar com /bigobj só tem suporte no conjunto de ferramentas vc 140.

  • Depuração de modo misto (nativo/gerenciado).

  • Depuração de JavaScript.

  • Depuração de SQL.

  • Depurando um arquivo de despejo.

  • Editando o código após uma exceção sem tratamento quando a opção Desenrolar a pilha de chamadas em exceções não tratadas não está selecionada.

  • Depurando um aplicativo usando Anexar a em vez de executar o aplicativo escolhendo Iniciar no menu Depurar.

  • Depurando código otimizado.

  • Depurando uma versão antiga do código depois que uma nova versão não é compilada devido a erros de compilação.

  • Usando um caminho de compilador personalizado (cl.exe). Por motivos de segurança, para recompilação de um arquivo durante Editar e Continuar, o Visual Studio sempre usa o compilador instalado. Se você estiver usando um caminho de compilador personalizado (por exemplo, por meio de uma variável personalizada $(ExecutablePath) em seu arquivo *.props), um aviso será exibido e o Visual Studio voltará a usar o compilador instalado da mesma versão/arquitetura.

  • Arquiteturas herdadas/conjuntos de ferramentas vc. Com o conjunto de ferramentas VC 140, o depurador padrão dá suporte a Editar e Continuar com aplicativos X86 e X64. Os conjuntos de ferramentas herdados dão suporte apenas a aplicativos X86. Os conjuntos de ferramentas com mais de VC 120 devem usar o depurador herdado verificando "Opções > de Depuração > Geral > Usar Modo de Compatibilidade Nativa" para usar Editar e Continuar.

Limitações de vinculação

Opções de vinculador que desabilitam Editar e Continuar

As opções de vinculador a seguir desabilitam Editar e Continuar:

  • Definir /OPT:REF, /OPT:ICFou /INCREMENTAL:NO desabilita Editar e Continuar com o seguinte aviso:
    LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /OPT specification

  • A configuração de/ORDER, /RELEASE ou /FORCE desabilita Editar e Continuar com o seguinte aviso:
    LINK : warning LNK4075: ignoring /INCREMENTAL due to /option specification

  • Definir qualquer opção que evite a criação de um arquivo de banco de dados do programa (.pdb) desabilita Editar e Continuar sem aviso específico.

Limitações de vinculação automática

Por padrão, Editar e Continuar vincula novamente o programa ao final de uma sessão de depuração para criar um executável atualizado.

Editar e Continuar não pode vincular o programa novamente se você o depurá-lo a partir de um local diferente do local de compilação original. Uma mensagem informa que você precisa recompilar manualmente.

Editar e Continuar não recompila bibliotecas estáticas. Se você fizer alterações em uma biblioteca estática usando Editar e Continuar, você precisará recompilar a biblioteca e vincular novamente os aplicativos que a utilizam.

Editar e Continuar não invoca as etapas personalizadas de compilação. Se o seu programa usa etapas personalizadas de compilação, recompile manualmente de modo que as etapas personalizadas de compilação possam ser invocadas. Nesse caso, você pode desabilitar nova vinculação após Editar e Continuar para assegurar que seja solicitado a fazer a recompilação manualmente.

Para desabilitar a nova vinculação após Editar e Continuar

  1. No menu de Depurar, escolha Opções e Configurações.

  2. Na caixa de diálogo Opções, abra o nó Depuração e selecione nó Editar e Continuar.

  3. Desmarque a caixa de seleção Vincular novamente alterações de código após a depuração.

Limitações de cabeçalho pré-compilado

Por padrão, Editar e Continuar carrega e processa cabeçalhos pré-compilados no plano de fundo para acelerar o processamento de alterações de código. O carregamento de cabeçalhos pré-compilados requer a alocação de memória física, o que pode ser um problema se você estiver compilando em um computador com RAM limitada. Você pode determinar se isso é um problema usando o Gerenciador de Tarefas do Windows para definir a quantidade de memória física disponível durante a depuração. Se esse valor for maior que o tamanho dos cabeçalhos pré-compilados, Editar e Continuar não terá problemas. Se o valor for menor que o tamanho dos cabeçalhos pré-compilados, você pode impedir que Editar e Continuar carregue cabeçalhos pré-compilados no plano de fundo.

Para desabilitar o carregamento em segundo plano de cabeçalhos pré-compilados para Editar e Continuar

  1. No menu de Depurar, escolha Opções e Configurações.

  2. Na caixa de diálogo Opções, abra o nó Depuração e selecione nó Editar e Continuar.

  3. Desmarque a caixa de seleção Permitir Pré-Compilação.

Limitações de atributo IDL

Editar e Continuar não regenera arquivos de linguagem IDL. Consequentemente, as alterações aos atributos de IDL não serão refletidas ao depurar. Para ver o resultado das alterações de atributos de IDL, você deverá parar de depurar e recriar seu aplicativo. Editar e Continuar não gera um erro ou um aviso se os atributos de IDL tiverem sido alterados. Para obter mais informações, confira Atributos de IDL.

Diagnosticando problemas

Se o cenário não se ajustar a nenhuma das condições mencionadas acima, você poderá coletar mais detalhes definindo o seguinte valor do Registro DWORD:

  1. Abra um prompt de comando para desenvolvedor.
  2. Execute o seguinte comando:
    VsRegEdit.exe set “C:\Program Files\Microsoft Visual Studio\[Version]\[YOUR EDITION]” HKCU Debugger NativeEncDiagnosticLoggingLevel DWORD 1
    VsRegEdit.exe set “C:\Program Files (x86)\Microsoft Visual Studio\[Version]\[YOUR EDITION]” HKCU Debugger NativeEncDiagnosticLoggingLevel DWORD 1

Definir esse valor no início de uma sessão de depuração faz com que os vários componentes de Editar e Continuar expelam log detalhado no painel Janela de saída>Depuração