Метод ICorProfilerInfo::SetILInstrumentedCodeMap
Задает карту кода для указанной функции с помощью указанных записей карты CIL.
Примечание.
В платформа .NET Framework версии 2.0 вызов SetILInstrumentedCodeMap
FunctionID
универсальной функции в определенном домене приложения повлияет на все экземпляры этой функции в домене приложения.
Синтаксис
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
объекта. Задайте значение fStartJit
true
в первом вызове 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