ICorProfilerInfo::SetILInstrumentedCodeMap 메서드

지정된 CIL(공용 중간 언어) 맵 항목을 사용하여 지정된 함수에 대한 코드 맵을 설정합니다.

참고 항목

.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에 대한 첫 번째 호출에서 fStartJittrue로 설정하고 그 이후에는 false로 설정합니다.

cILMapEntries
[in] cILMapEntries의 요소 수입니다.

rgILMapEntries
[in] 각각 CIL 오프셋을 지정하는 COR_IL_MAP 구조체의 배열입니다.

설명

프로파일러는 해당 메서드를 계측하기 위해(예: 지정된 소스 줄에 도달할 때 알리기 위해) 메서드의 소스 코드 내에 문을 삽입하는 경우가 많습니다. SetILInstrumentedCodeMap 를 사용하면 프로파일러가 원래 CIL 명령을 새 위치에 매핑할 수 있습니다. 프로파일러는 ICorProfilerInfo::GetILToNativeMapping 메서드를 사용하여 지정된 네이티브 오프셋에 대한 원래 CIL 오프셋을 가져올 수 있습니다.

디버거는 각 이전 오프셋이 원래의 수정되지 않은 CIL 코드 내의 CIL 오프셋을 참조하고 각 새 오프셋이 계측된 새 코드 내의 CIL 오프셋을 참조한다고 가정합니다. 맵은 오름차순으로 정렬되어야 합니다. 제대로 작동하려면 다음 지침을 따르세요.

  • 계측된 CIL 코드의 순서를 다시 지정하지 마세요.

  • 원래 CIL 코드를 제거하지 마세요.

  • 맵의 PDB(프로그램 데이터베이스) 파일의 모든 시퀀스 지점에 대한 항목을 포함합니다. 맵은 누락된 항목을 보간하지 않습니다. 다음과 같은 맵을 가정합니다.

    (이전 0, 신규 0)

    (이전 5, 신규 10)

    (이전 9, 신규 20)

    • 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 3.5 및 이전 버전에서는 CoTaskMemAlloc 메서드를 호출하여 rgILMapEntries 배열을 할당합니다. 런타임이 이 메모리의 소유권을 갖기 때문에 프로파일러는 메모리를 해제하려고 시도해서는 안 됩니다.

요구 사항

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

헤더: CorProf.idl, CorProf.h

라이브러리: CorGuids.lib

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

참고 항목