Condividi tramite


Metodo ICorDebugModule2::ApplyChanges

Applica le modifiche relative ai metadati e al codice MSIL (Microsoft Intermediate Language) al processo in esecuzione.

HRESULT ApplyChanges (
    [in] ULONG                       cbMetadata,
    [in, size_is(cbMetadata)] BYTE   pbMetadata[],
    [in] ULONG                       cbIL,
    [in, size_is(cbIL)] BYTE         pbIL[]
);

Parametri

  • cbMetadata
    [in] Dimensione, in byte, dei metadati delta.

  • pbMetadata
    [in] Buffer che contiene i metadati delta. L'indirizzo del buffer viene restituito dal metodo IMetaDataEmit2::SaveDeltaToMemory.

    Gli indirizzi virtuali relativi (RVA, Relative Virtual Address) nei metadati devono essere relativi all'inizio del codice MSIL.

  • cbIL
    [in] Dimensione, in byte, del codice MSIL delta.

  • pbIL
    [in] Buffer che contiene il codice MSIL aggiornato.

Note

Il parametro pbMetadata è in un formato speciale per metadati delta (come output di IMetaDataEmit2::SaveDeltaToMemory). pbMetadata prende metadati precedenti come base e descrive le singole modifiche da applicare alla base.

Il parametro pbIL[] invece contiene nuovo MSIL per il metodo aggiornato ed è concepito per sostituire completamente il precedente MSIL per quel metodo.

Quando il codice MSIL delta e i metadati vengono creati nella memoria del debugger, quest'ultimo chiama ApplyChanges per inviare le modifiche in Common Language Runtime. Il runtime aggiorna le relative tabelle dei metadati, inserisce il nuovo codice MSIL nel processo e imposta una compilazione JIT di tale codice. Una volta applicate le modifiche, il debugger deve chiamare il metodo IMetaDataEmit2::ResetENCLog per preparare la sessione di modifica successiva. Il debugger può quindi proseguire con il processo.

Ogni volta che il debugger chiama l'oggetto ApplyChanges su un modulo con metadati delta, deve chiamare anche il metodo IMetaDataEmit::ApplyEditAndContinue con gli stessi metadati delta su tutte le copie dei metadati di quel modulo di cui dispone, tranne la copia utilizzata per generare le modifiche. Se una copia dei metadati in qualche modo non è più sincronizzata con i metadati effettivi, il debugger può sempre eliminare tale copia e ottenerne una nuova.

Se il metodo ApplyChanges ha esito negativo, la sessione di debug verrà a trovarsi in uno stato non valido e dovrà essere riavviata.

Requisiti

Piattaforme: vedere Requisiti di sistema di .NET Framework.

Intestazione: CorDebug.idl, CorDebug.h

Libreria: CorGuids.lib

Versioni di .NET Framework: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

Vedere anche

Riferimenti

Interfaccia ICorDebugModule2

Interfaccia ICorDebugModule