Comparteix a través de


FunctionLeave2 (Función)

Esta función puede usarse para notificar al generador de perfiles de que una función está a punto de devolverse al llamador, así como para proporcionar información sobre el marco de pila y el valor devuelto de una función.

Sintaxis

void __stdcall FunctionLeave2 (  
    [in]  FunctionID                        funcId,  
    [in]  UINT_PTR                          clientData,  
    [in]  COR_PRF_FRAME_INFO                func,  
    [in]  COR_PRF_FUNCTION_ARGUMENT_RANGE  *retvalRange  
);  

Parámetros

funcId [in] El valor de este parámetro se corresponde con el identificador de la función que se va a devolver.

clientData [in] El valor de este parámetro se corresponde con el identificador reasignado de la función que se especificó anteriormente en el generador de perfiles mediante la función FunctionIDMapper.

func [in] El valor COR_PRF_FRAME_INFO de este parámetro se usa para apuntar a la información sobre el marco de pila.

El generador de perfiles debe tratar este valor como si fuese un manipulador opaco que se puede devolver al motor de ejecución en el método ICorProfilerInfo2::GetFunctionInfo2 .

retvalRange [in] El valor de este parámetro se corresponde con un puntero que apunta a una estructura COR_PRF_FUNCTION_ARGUMENT_RANGE, donde se especifica la ubicación de memoria del valor devuelto de la función.

Para obtener acceso a la información de valor devuelto, se deberá establecer la marca COR_PRF_ENABLE_FUNCTION_RETVAL. Para establecer las marcas de evento, puede usarse el método ICorProfilerInfo::SetEventMask en el generador de perfiles.

Comentarios

Los valores de los parámetros func y retvalRange no serán válidos una vez que la función FunctionLeave2 se devuelva, ya que puede que estos cambien o se destruyan.

La función FunctionLeave2 es una devolución de llamada y, como tal, debe implementarse. La implementación debe usar el atributo __declspec(naked) de las clases de almacenamiento.

El motor de ejecución no guarda ningún registro antes de que se llame a esta función.

  • En el proceso de entrada de la función, deberá guardar todos los registros que use, incluidos los de la unidad de punto flotante (FPU).

  • En el proceso de salida, deberá quitar todos los parámetros que haya insertado su llamador para restaurar la pila.

La implementación de la función FunctionLeave2 no debe bloquearse, ya que esto producirá retrasos en los procesos de recolección de elementos no utilizados. En la implementación, no deberá intentarse realizar un proceso de recolección de elementos no utilizados, ya que es posible que la pila esté en un estado en el que este no se pueda realizar. Si se intenta realizar un proceso de recolección de elementos no utilizados, el tiempo de ejecución se bloqueará hasta que se devuelva la función FunctionLeave2.

Además, la función FunctionLeave2 no deberá usarse para realizar llamadas a código administrado ni para provocar una asignación de memoria administrada sin importar el motivo.

Requisitos

Plataformas: Vea Requisitos de sistema.

Encabezado: CorProf.idl

Biblioteca: CorGuids.lib

Versiones de .NET Framework: disponible a partir de la versión 2.0

Consulte también