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


Функция FunctionTailcall2

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

Синтаксис

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

Параметры

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

clientData [in] Переназначенный идентификатор функции, который профилировщик ранее указал с помощью FunctionIDMapper, выполняемой в данный момент функции, которая должна выполнить вызов хвоста.

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

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

Комментарии

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

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

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

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

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

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

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

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

Требования

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

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

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

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

См. также раздел