Функция FunctionLeave2
Уведомляет профилировщик о готовности функции к возврату значения вызывающему объекту и предоставляет сведения о кадре стека и аргументах функции.
void __stdcall FunctionLeave2 (
[in] FunctionID funcId,
[in] UINT_PTR clientData,
[in] COR_PRF_FRAME_INFO func,
[in] COR_PRF_FUNCTION_ARGUMENT_RANGE *retvalRange
);
Параметры
funcId
[in] Возвращаемый идентификатор функции.clientData
[in] Повторно сопоставленный идентификатор функции, который был задан ранее профилировщиком посредством функции FunctionIDMapper.func
[in] Значение COR_PRF_FRAME_INFO, указывающее на сведения о кадре стека.Профилировщик должен интерпретировать его как непрозрачный дескриптор, который может быть передан назад в ядро выполнения в методе ICorProfilerInfo2::GetFunctionInfo2.
retvalRange
[in] Указатель на структуру COR_PRF_FUNCTION_ARGUMENT_RANGE, которая задает расположение возвращенного значения в памяти.Для доступа к сведениям о возвращенном значении должен быть задан флаг COR_PRF_ENABLE_FUNCTION_RETVAL. Профилировщик может задать флаги значения с помощью метода ICorProfilerInfo::SetEventMask.
Заметки
Значения параметров func и retvalRange становятся недопустимыми после возврата значения функции FunctionLeave2, поскольку они могут быть изменены или удалены.
Функция FunctionLeave2 является функцией обратного вызова; ее следует реализовать. В реализации должен использоваться атрибут класса памяти __declspec(naked).
Перед вызовом этой функции ядро выполнения не сохраняет значения регистров.
При входе необходимо сохранить все используемые регистры, включая те, что находятся в блоке выполнения операций с плавающей запятой (FPU).
При выходе необходимо восстановить стек путем выталкивания из него всех параметров, помещенных туда вызывающим кодом.
Реализация функции FunctionLeave2 не должна осуществлять блокировку, поскольку это приведет к задержке сборки мусора. При реализации не следует предпринимать попытку сборки мусора, поскольку стек может находиться в состоянии, не поддерживающем этот процесс. Если предпринимается попытка выполнения сборки мусора, среда выполнения будет блокироваться до тех пор, пока функция FunctionLeave2 не возвратит значение.
Кроме того, функция FunctionLeave2 не должна вызывать управляемый код или каким-либо образом инициировать управляемое распределение памяти.
Требования
Платформы: см. раздел Требования к системе для .NET Framework.
Заголовок: CorProf.idl
Библиотека: CorGuids.lib
Версии платформы .NET Framework: 4, 3.5 с пакетом обновления 1 (SP1), 3.5, 3.0 с пакетом обновления 1 (SP1), 3.0, 2.0 с пакетом обновления 1 (SP1), 2.0
См. также
Ссылки
Метод ICorProfilerInfo2::SetEnterLeaveFunctionHooks2
Другие ресурсы
Глобальные статические функции профилирования
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Октябрь 2010 |
__stdcall добавлен в синтаксис. |
Обратная связь от клиента. |