Функция FunctionEnter2
Уведомляет профилировщика о том, что элемент управления передается в функцию, и предоставляет сведения о кадре стека и аргументах функции. Эта функция заменяет функцию FunctionEnter .
Синтаксис
void __stdcall FunctionEnter2 (
[in] FunctionID funcId,
[in] UINT_PTR clientData,
[in] COR_PRF_FRAME_INFO func,
[in] COR_PRF_FUNCTION_ARGUMENT_INFO *argumentInfo
);
Параметры
funcId
[in] Идентификатор функции, в которую передается элемент управления.
clientData
[in] Идентификатор переназначенной функции, который профилировщик ранее указал с помощью функции FunctionIDMapper .
func
[in] Значение COR_PRF_FRAME_INFO
типа , указывающее сведения о кадре стека.
Профилировщик должен рассматривать его как непрозрачный дескриптор, который можно передать обратно в подсистему выполнения в методе ICorProfilerInfo2::GetFunctionInfo2 .
argumentInfo
[in] Указатель на структуру COR_PRF_FUNCTION_ARGUMENT_INFO , указывающую расположения аргументов функции в памяти.
Чтобы получить доступ к сведениям о аргументах COR_PRF_ENABLE_FUNCTION_ARGS
, необходимо установить флаг . Профилировщик может использовать метод ICorProfilerInfo::SetEventMask для установки флагов событий.
Комментарии
Значения func
параметров и argumentInfo
недопустимы после FunctionEnter2
возврата функцией, так как значения могут измениться или быть уничтожены.
Функция FunctionEnter2
является обратным вызовом; ее необходимо реализовать. Реализация должна использовать __declspec
атрибут класса хранения (naked
).
Подсистема выполнения не сохраняет регистры перед вызовом этой функции.
При записи необходимо сохранить все используемые регистры, включая регистры в единице с плавающей запятой (FPU).
При выходе необходимо восстановить стек, вырвав все параметры, которые были отправлены вызывающим элементом.
Реализация FunctionEnter2
не должна блокироваться, так как это приведет к задержке сборки мусора. Реализация не должна пытаться выполнить сборку мусора, так как стек может не находиться в состоянии, удобном для сборки мусора. При попытке сборки мусора среда выполнения будет блокироваться до тех пор, пока не FunctionEnter2
вернется.
Кроме того, FunctionEnter2
функция не должна вызывать в управляемый код или каким-либо образом вызывать выделение управляемой памяти.
Требования
Платформы: см. раздел Требования к системе.
Заголовка: CorProf.idl
Библиотека: CorGuids.lib
версии платформа .NET Framework: доступно с версии 2.0