ICorProfilerInfo::SetILInstrumentedCodeMap 메서드
지정된 MSIL(Microsoft Intermediate Language) 맵 항목을 사용하여 지정된 함수의 코드 맵을 설정합니다.
참고 |
---|
.NET Framework 버전 2.0에서 특정 응용 프로그램 도메인의 제네릭 함수를 나타내는 FunctionID의 SetILInstrumentedCodeMap을 호출하면 응용 프로그램 도메인에 있는 해당 함수의 모든 인스턴스에 영향을 줍니다. |
HRESULT SetILInstrumentedCodeMap(
[in] FunctionID functionId,
[in] BOOL fStartJit,
[in] ULONG cILMapEntries,
[in, size_is(cILMapEntries)] COR_IL_MAP rgILMapEntries[]);
매개 변수
functionId
[in] 코드 맵을 설정할 함수의 ID입니다.fStartJit
[in] SetILInstrumentedCodeMap 메서드 호출이 특정 FunctionID에 대한 첫 번째 호출인지 여부를 나타내는 부울 값입니다. 지정된 FunctionID에 대한 SetILInstrumentedCodeMap의 첫 번째 호출에서는 fStartJit를 true로 설정하고 첫 번째 이후 호출에서는 false로 설정합니다.cILMapEntries
[in] cILMapEntries 배열의 요소 수입니다.rgILMapEntries
[in] 각 MSIL 오프셋을 지정하는 COR_IL_MAP 구조체의 배열입니다.
설명
프로파일러에서는 지정된 소스 줄에 도달할 때 알리는 등의 메서드 계측을 위해 해당 메서드의 소스 코드 내에 문을 삽입하는 경우가 있습니다. SetILInstrumentedCodeMap을 사용하면 프로파일러에서 원래 MSIL 명령을 해당 새 위치로 매핑할 수 있습니다. 프로파일러에서는 ICorProfilerInfo::GetILToNativeMapping 메서드를 사용하여 지정된 네이티브 오프셋의 원래 MSIL 오프셋을 가져올 수 있습니다.
디버거에서는 이전의 각 오프셋이 원래의 수정되지 않은 MSIL 코드 내의 MSIL 오프셋을 참조하고 새로운 각 오프셋은 계측된 새 코드 내의 MSIL 오프셋을 참조한다고 간주합니다. 맵은 오름차순으로 정렬되어야 합니다. 단계별 코드 실행이 제대로 작동하도록 하려면 다음 지침을 따르십시오.
계측된 MSIL 코드의 순서가 변경되지 않아야 합니다.
원래 MSIL 코드가 제거되지 않아야 합니다.
PDB(프로그램 데이터베이스) 파일의 모든 시퀀스 위치에 대한 항목이 맵에 포함되어야 합니다. 맵에서는 누락된 항목을 보간하지 않습니다. 따라서 다음과 같은 맵을 생각해 볼 수 있습니다.
(0 old, 0 new)
(5 old, 10 new)
(9 old, 20 new)
이전 오프셋 0, 1, 2, 3, 4는 새 오프셋 0에 매핑됩니다.
이전 오프셋 5, 6, 7, 8은 새 오프셋 10에 매핑됩니다.
이전 오프셋 9 이상은 새 오프셋 20에 매핑됩니다.
새 오프셋 0, 1, 2, 3, 4, 5, 6, 7, 8, 9는 이전 오프셋 0에 매핑됩니다.
새 오프셋 10, 11, 12, 13, 14, 15, 16, 17, 18, 19는 이전 오프셋 5에 매핑됩니다.
새 오프셋 20 이상은 이전 오프셋 9에 매핑됩니다.
요구 사항
플랫폼: .NET Framework 시스템 요구 사항 참조
헤더: CorProf.idl, CorProf.h
라이브러리: CorGuids.lib
.NET Framework 버전: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1