Partilhar via


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

"O recurso de Edição e Continuação para projetos C++ trata de a maioria dos tipos de alterações de código." No entanto, algumas alterações não podem ser aplicadas durante a execução do programa. Para aplicar essas alterações, você deve parar a execução e criar uma nova versão do código.

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

Requerimentos

Configurações de compilação (Propriedades do projeto > )

  • C/C++ > Formato geral > de informações de depuração: Banco de dados de programas para editar e continuar (/ZI)

  • Vinculador > Geral > Habilitar vinculação incremental: Sim (/INCREMENTAL)

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

Configurações do depurador (Opções de depuração > )

Abra o painel Depuração (ou Ferramentas) >Opções e expanda a seção Todas as Configurações>Depuração>.NET/C++ Hot Reload.

Abra a caixa de diálogo Depuração (ou Ferramentas) >Opções, e expanda a seção Depuração>.NET/C++ Hot Reload.

Selecione uma ou todas as seguintes opções para ativar o recurso:

  • Ativar Hot Reload: Ativa o Hot Reload ao iniciar com o depurador anexado (F5).

  • Ativar Hot Reload ao iniciar sem depuração: Ativa Hot Reload ao iniciar sem o depurador anexado (Ctrl + F5).

  • Ativar Hot Reload ao Salvar Arquivo: Habilita Hot Reload quando o arquivo é salvo.

  • Verbosidade do log: defina o nível de registo quando o Hot Reload estiver habilitado. Escolha entre Mínimo (padrão), Detalhado ou Diagnóstico.

A alteração dessas configurações afeta todos os projetos em que você trabalha. Você não precisa reconstruir seu aplicativo depois de alterar uma configuração. Se compilares a tua aplicação a partir da linha de comandos ou de um makefile, mas fizeres a depuração no ambiente do Visual Studio, ainda podes usar "Editar e Continuar" se definires a opção /ZI.

Na caixa de diálogo Depuração (ou Ferramentas) >, expanda a seção Depuração> e marque a caixa de seleção Ativar Edição Nativa e Continuar.

Qualquer compilador incompatível ou configurações de vinculador causam 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 C/C++ não podem ser aplicadas durante uma sessão de depuração. Se você fizer qualquer uma dessas alterações e, em seguida, tentar aplicar alterações de código, uma mensagem de erro ou aviso aparecerá na janela Saída .

  • A maior parte das modificações nos dados globais ou estáticos.

  • Alterações em executáveis que são copiados de outra máquina e não criados localmente.

  • Alterações em um tipo de dados que afetam o layout de um objeto, como membros de dados de uma classe.

  • Adicionar mais de 64 mil bytes de novo código ou dados.

  • Adicionar variáveis que exigem um construtor num ponto anterior ao apontador de instrução.

  • Alterações que afetam o código que requer inicialização em tempo de execução.

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

  • Alterações em arquivos de recursos.

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

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

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

  • Modificando lambdas nos seguintes cenários:

    • Quando lambdas têm um membro estático ou global.
    • Quando se passa lambdas para um std::function. Este método causa uma violação de 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 não suportados

Editar e Continuar para C/C++ não está disponível nas seguintes situações de depuração:

  • Depuração de aplicações nativas compiladas com /Zo (Aperfeiçoar Depuração Otimizada)

  • Projetos que usam o conjunto de ferramentas MSVC v120 e a opção C/C++ /bigobj . Editar e continuar com /bigobj só é suportado nas ferramentas de compilação MSVC v140 e posteriores.

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

  • Depuração de JavaScript.

  • Depuração SQL.

  • Depurando um arquivo de despejo.

  • Editando código após uma exceção não tratada, quando a opção Desenrolar a pilha de chamadas em exceções não tratadas não estiver selecionada.

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

  • Depuração de código otimizado.

  • Depurar uma versão antiga do seu código depois de uma nova versão não conseguir compilar devido a erros de compilação.

  • Usando um caminho de compilador personalizado (cl.exe). Por motivos de segurança, para a recompilação de um arquivo durante Edit and Continue, 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 *.props arquivo), um aviso será exibido e o Visual Studio voltará a usar o compilador instalado da mesma versão/arquitetura.

  • Arquiteturas legadas/conjuntos de ferramentas MSVC. Com o conjunto de ferramentas MSVC v140, o depurador padrão suporta Editar e Continuar com aplicativos X86 e X64. Os conjuntos de ferramentas herdados suportam apenas aplicações X86. Os conjuntos de ferramentas anteriores ao MSVC v120 deverão utilizar o depurador legado, selecionando "Debug > Options > General > Use Native Compatibility Mode", de modo a usar a funcionalidade Edit and Continue.

Limitações de vinculação

Opções de vinculação que desativam Editar e Continuar

As seguintes opções de vinculador desativam Editar e Continuar:

  • A configuração /OPT:REF, /OPT:ICF ou /INCREMENTAL:NO desativa Editar e Continuar com o seguinte aviso:
    LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /OPT specification

  • Definir /ORDER, /RELEASE ou /FORCE desativa Editar e Continuar com o seguinte aviso:
    LINK : warning LNK4075: ignoring /INCREMENTAL due to /option specification

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

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

Por padrão, Editar e Continuar revincula seu programa no final de uma sessão de depuração para criar um executável atualizado.

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

Editar e Continuar não reconstrói bibliotecas estáticas. Se você fizer alterações em uma biblioteca estática usando Editar e Continuar, precisará reconstruir manualmente a biblioteca e revincular os aplicativos que a utilizam.

Editar e Continuar não invoca etapas de compilação personalizadas. Se o seu programa usa etapas de compilação personalizadas, convém reconstruir manualmente para que as etapas de compilação personalizadas possam ser invocadas. Nesse caso, você pode desativar a revinculação após Editar e Continuar para garantir que você seja solicitado a reconstruir manualmente.

Para desativar a revinculação após Editar e Continuar:

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

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

  3. Desmarque a caixa de seleção Vinculação das 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 em segundo plano para acelerar o processamento de alterações de código. O carregamento de cabeçalhos pré-compilados requer alocação de memória física, o que pode ser um problema se você estiver compilando em uma máquina com RAM limitada. Você pode determinar se isso pode ser um problema usando o Gerenciador de Tarefas do Windows para determinar a quantidade de memória física disponível durante a depuração. Se essa quantidade for maior do que o tamanho dos cabeçalhos pré-compilados, Editar e Continuar não deve ter problemas. Se a quantidade for menor do que o tamanho dos cabeçalhos pré-compilados, você poderá impedir que Editar e Continuar carreguem cabeçalhos pré-compilados em segundo plano.

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

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

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

  3. Desmarque a caixa de seleção Permitir pré-compilação .

Limitações de atributos IDL

Editar e Continuar não regenera arquivos IDL (linguagem de definição de interface). Portanto, as alterações nos atributos IDL não são refletidas durante a depuração. Para ver o resultado das alterações nos atributos IDL, você deve parar de depurar e reconstruir seu aplicativo. Editar e continuar não gera um erro ou aviso se os atributos IDL tiverem sido alterados. Para obter mais informações, consulte Atributos IDL.

Diagnosticar problemas

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

  1. Abra um prompt de comando do 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 este valor no início de uma sessão de depuração faz com que os vários componentes de Edit and Continue registrem logs detalhados no painel Depurar da >.