ICorDebugModule2::ApplyChanges 方法
将元数据中的更改和公共中间语言 (CIL) 代码中的更改应用于正在运行的进程。
语法
HRESULT ApplyChanges (
[in] ULONG cbMetadata,
[in, size_is(cbMetadata)] BYTE pbMetadata[],
[in] ULONG cbIL,
[in, size_is(cbIL)] BYTE pbIL[]
);
参数
cbMetadata
[in]增量元数据的大小(以字节为单位)。
pbMetadata
[in]包含增量元数据的缓冲区。 缓冲区的地址是从 IMetaDataEmit2::SaveDeltaToMemory 方法返回的。
元数据中的相对虚拟地址(RVA)应相对于 CIL 代码的开头。
cbIL
[in]增量 CIL 代码的大小(以字节为单位)。
pbIL
[in]包含更新的 CIL 代码的缓冲区。
注解
pbMetadata
参数采用特殊的增量元数据格式(如 IMetaDataEmit2::SaveDeltaToMemory 输出的)。 pbMetadata
将以前的元数据作为基础,并描述要应用于该基础的各个更改。
相反, pbIL[
] 参数包含更新方法的新 CIL,并且旨在完全替换该方法的上一个 CIL
在调试器的内存中创建增量 CIL 和元数据时,调试器将调用 ApplyChanges
将更改发送到公共语言运行时 (CLR)。 运行时更新其元数据表,将新的 CIL 放入进程中,并设置新 CIL 的实时(JIT)编译。 应用这些更改后,调试器应调用 IMetaDataEmit2::ResetENCLog 来准备下一个编辑会话。 然后,调试器可以继续执行该过程。
每当调试器在具有增量元数据的模块上调用 ApplyChanges
时,它还应在该模块的元数据的所有副本(用于发出更改的副本除外)上调用具有相同增量元数据的 IMetaDataEmit::ApplyEditAndContinue。 如果元数据的副本在某种程度上与实际的元数据不同步,调试器始终可以丢弃该副本并获取新副本。
如果 ApplyChanges
方法失败,调试会话会处于无效状态,必须重新启动。
要求
平台:请参阅系统要求。
标头:CorDebug.idl、CorDebug.h
库:CorGuids.lib
.NET Framework 版本:自 2.0 起可用