Функция 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