Поделиться через


Функция FunctionTailcall2

Уведомляет профилировщик о готовности выполняемой в данный момент функции к вызову другой функции с префиксом tail и предоставляет сведения о кадре стека и аргументах функции.

void __stdcall FunctionTailcall2 (
    [in] FunctionID         funcId, 
    [in] UINT_PTR           clientData, 
    [in] COR_PRF_FRAME_INFO func
);

Параметры

  • funcId
    [in] Идентификатор выполняемой в данный момент функции, которая намерена выполнить вызов с префиксом tail.

  • clientData
    [in] Сопоставленный повторно идентификатор функции, который был задан ранее профилировщиком посредством функции FunctionIDMapper, для выполняемой в данный момент функции, которая намерена выполнить вызов с префиксом tail.

  • func
    [in] Значение COR_PRF_FRAME_INFO, указывающее на сведения о кадре стека.

    Профилировщик должен интерпретировать его как непрозрачный дескриптор, который может быть передан назад в ядро выполнения в методе ICorProfilerInfo2::GetFunctionInfo2.

Заметки

Целевая функция вызова с префиксом tail будет использовать текущий кадр стека и возвратит значение непосредственно вызывающему объекту функции, которая осуществила такой вызов. Это означает, что обратный вызов FunctionLeave2 не будет использоваться для функции, которая является целевой для вызова с префиксом tail.

Значение параметра func является недопустимым после возврата значения функцией FunctionTailcall2, поскольку это значение могло быть изменено или удалено.

Функция FunctionTailcall2 является функцией обратного вызова; ее следует реализовать. В реализации должен использоваться атрибут класса памяти __declspec(naked).

Перед вызовом этой функции ядро выполнения не сохраняет значения регистров.

  • При входе необходимо сохранить все используемые регистры, включая те, что находятся в блоке выполнения операций с плавающей запятой (FPU).

  • При выходе необходимо восстановить стек путем выталкивания из него всех параметров, помещенных туда вызывающим кодом.

Реализация функции FunctionTailcall2 не должна осуществлять блокировку, поскольку это приведет к задержке сборки мусора. При реализации не следует предпринимать попытку сборки мусора, поскольку стек может находиться в состоянии, не поддерживающем этот процесс. Если предпринимается попытка выполнения сборки мусора, среда выполнения будет блокироваться до тех пор, пока функция FunctionTailcall2 не возвратит значение.

Кроме того, функция FunctionTailcall2 не должна вызывать управляемый код или каким-либо образом инициировать управляемое распределение памяти.

Требования

Платформы: см. раздел Требования к системе для .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

См. также

Ссылки

Функция FunctionEnter2

Функция FunctionLeave2

Метод ICorProfilerInfo2::SetEnterLeaveFunctionHooks2

Другие ресурсы

Глобальные статические функции профилирования

Журнал изменений

Дата

Журнал

Причина

Октябрь 2010

__stdcall добавлен в синтаксис.

Обратная связь от клиента.