Метод ICorProfilerInfo::SetILInstrumentedCodeMap

Задает карту кода для указанной функции с помощью указанных записей карты CIL.

Примечание.

В платформа .NET Framework версии 2.0 вызов SetILInstrumentedCodeMapFunctionID универсальной функции в определенном домене приложения повлияет на все экземпляры этой функции в домене приложения.

Синтаксис

HRESULT SetILInstrumentedCodeMap(
    [in]  FunctionID functionId,
    [in]  BOOL       fStartJit,
    [in]  ULONG      cILMapEntries,
    [in, size_is(cILMapEntries)] COR_IL_MAP rgILMapEntries[]);

Параметры

functionId
[in] Идентификатор функции, для которой необходимо задать карту кода.

fStartJit
[in] Логическое значение, указывающее, является ли вызов SetILInstrumentedCodeMap метода первым для конкретного FunctionIDобъекта. Задайте значение fStartJittrue в первом вызове SetILInstrumentedCodeMap для заданного FunctionIDи последующего false .

cILMapEntries
[in] Количество элементов в массиве cILMapEntries .

rgILMapEntries
[in] Массив структур COR_IL_MAP, каждый из которых задает смещение CIL.

Замечания

Профилировщик часто вставляет инструкции в исходный код метода, чтобы инструментировать этот метод (например, уведомлять о достижении заданной исходной строки). 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 и предыдущих версиях массив выделяется rgILMapEntries путем вызова метода CoTaskMemAlloc. Так как среда выполнения берет на себя ответственность за эту память, профилировщик не должен пытаться освободить его.

Требования

Платформы: см. раздел Требования к системе.

Заголовок: CorProf.idl, CorProf.h

Библиотека: CorGuids.lib

версии платформа .NET Framework: Доступно с версии 1.1

См. также