다음을 통해 공유


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 및 메타데이터가 만들어지면 디버거는 변경 내용을 CLR(공용 언어 런타임)으로 보내기 위해 호출 ApplyChanges 합니다. 런타임은 메타데이터 테이블을 업데이트하고, 새 CIL을 프로세스에 배치하고, 새 CIL의 JIT(Just-In-Time) 컴파일을 설정합니다. 변경 내용이 적용된 경우 디버거는 IMetaDataEmit2::ResetENCLog를 호출하여 다음 편집 세션을 준비해야 합니다. 그러면 디버거가 프로세스를 계속할 수 있습니다.

디버거가 델타 메타데이터가 있는 모듈에서 ApplyChanges를 호출할 때마다 변경 내용을 내보내는 데 사용되는 복사본을 제외하고 해당 모듈 메타데이터의 모든 복사본에서 동일한 델타 메타데이터를 사용하여 IMetaDataEmit::ApplyEditAndContinue를 호출해야 합니다. 메타데이터의 복사본이 실제 메타데이터와 동기화가 되지 않는 경우 디버거는 항상 해당 복사본을 버리고 새 복사본을 가져올 수 있습니다.

ApplyChanges 메서드가 실패하면 디버그 세션이 잘못된 상태이므로 다시 시작해야 합니다.

요구 사항

플랫폼:시스템 요구 사항을 참조하세요.

헤더: CorDebug.idl, CorDebug.h

라이브러리: CorGuids.lib

.NET Framework 버전: 2.0부터 사용 가능