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


Функция 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 функция не должна вызывать в управляемый код или каким-либо образом вызывать выделение управляемой памяти.

Требования

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

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

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

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

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