Método ICorDebugModule2::ApplyChanges
Aplica as alterações nos metadados e as alterações no código CIL (linguagem intermediária comum) ao processo em execução.
Sintaxe
HRESULT ApplyChanges (
[in] ULONG cbMetadata,
[in, size_is(cbMetadata)] BYTE pbMetadata[],
[in] ULONG cbIL,
[in, size_is(cbIL)] BYTE pbIL[]
);
Parâmetros
cbMetadata
[em] Tamanho, em bytes, dos metadados delta.
pbMetadata
[em] Buffer que contém os metadados delta. O endereço do buffer é retornado do método IMetaDataEmit2::SaveDeltaToMemory.
Os endereços virtuais relativos (RVAs) nos metadados devem ser relativos ao início do código CIL.
cbIL
[em] Tamanho, em bytes, do código CIL delta.
pbIL
[em] Buffer que contém o código CIL atualizado.
Comentários
O parâmetro pbMetadata
está em um formato de metadados delta especial (conforme gerado por IMetaDataEmit2::SaveDeltaToMemory). pbMetadata
usa metadados anteriores como base e descreve as alterações individuais a serem aplicadas a essa base.
Em contraste, o pbIL[
parâmetro ] contém a nova CIL para o método atualizado e destina-se a substituir completamente a CIL anterior para esse método
Quando a CIL delta e os metadados foram criados na memória do depurador, o depurador chama ApplyChanges
para enviar as alterações para o CLR (Common Language Runtime). O tempo de execução atualiza suas tabelas de metadados, coloca a nova CIL no processo e configura uma compilação just-in-time (JIT) da nova CIL. Quando as alterações tiverem sido aplicadas, o depurador deverá chamar IMetaDataEmit2::ResetENCLog para se preparar para a próxima sessão de edição. Em seguida, o depurador pode continuar o processo.
Sempre que o depurador chama ApplyChanges
em um módulo que tem metadados delta, ele também deve chamar IMetaDataEmit::ApplyEditAndContinue com os mesmos metadados delta em todas as suas cópias dos metadados desse módulo, exceto pela cópia usada para emitir as alterações. Se uma cópia dos metadados de alguma forma ficar fora de sincronia com os metadados reais, o depurador sempre poderá descartar essa cópia e obter uma nova.
Se o método ApplyChanges
falhar, a sessão de depuração estará em um estado inválido e deverá ser reiniciada.
Requisitos
Plataformas: confira Requisitos do sistema.
Cabeçalho: CorDebug.idl, CorDebug.h
Biblioteca: CorGuids.lib
Versões do .NET Framework: disponíveis desde 2.0