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


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

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