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