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 > ):
C/C++ > Formato geral > de informações de depuração: Banco de Dados do Programa para Editar e Continuar (
/ZI
)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
No menu de Depurar, escolha Opções e Configurações.
Na caixa de diálogo Opções, abra o nó Depuração e selecione nó Editar e Continuar.
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
No menu de Depurar, escolha Opções e Configurações.
Na caixa de diálogo Opções, abra o nó Depuração e selecione nó Editar e Continuar.
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:
- Abra um prompt de comando para desenvolvedor.
- 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