FunctionLeave2 (Función)
Notifica al generador de perfiles que hay una función a punto de volver al llamador y proporciona información sobre el marco de pila y el valor devuelto de la función.
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] Identificador de la función que se está devolviendo.clientData
(Opción) El identificador de la función reasignada, que el generador de perfiles especificó previamente a través de la función FunctionIDMapper.func
[in] Valor COR_PRF_FRAME_INFO que señala a información acerca del marco de pila.El generador de perfiles debe tratarlo como un identificador opaco que se puede devolver al motor de ejecución en el método ICorProfilerInfo2::GetFunctionInfo2.
retvalRange
(Opción) Puntero a una estructura COR_PRF_FUNCTION_ARGUMENT_RANGE que especifica la ubicación de memoria del valor devuelto por la función.Para tener acceso a la información del valor devuelto, se debe establecer el marcador COR_PRF_ENABLE_FUNCTION_RETVAL. El generador de perfiles puede utilizar el método ICorProfilerInfo::SetEventMask para establecer los marcadores de evento.
Comentarios
Los valores de los parámetros retvalRange y func no son válidos una vez que vuelve la función FunctionLeave2, porque los valores pueden cambiar o destruirse.
La función FunctionLeave2 es una devolución de llamada; debe implementarla. La implementación debe utilizar el atributo de clase de almacenamiento __declspec(naked).
El motor de ejecución no guarda ningún registro antes de llamar a esta función.
En la entrada, debe guardar todos los registros que utilice, incluidos los de la unidad de punto flotante (FPU).
Al salir, debe restablecer la pila desactivando todos los parámetros insertados por el llamador.
La implementación de FunctionLeave2 no debe bloquearse porque retrasaría la recolección de elementos. La implementación no debería intentar realizar la recolección de elementos no utilizados porque es posible que la pila no esté en un estado adecuado para ello. Si se intenta realizar una recolección de elementos, el motor en tiempo de ejecución se bloquea hasta que se devuelva FunctionLeave2
Asimismo, la función FunctionLeave2 no debe llamar a código administrado ni provocar de ninguna forma una asignación de memoria administrada.
Requisitos
Plataformas: vea Requisitos de sistema de .NET Framework.
Encabezado: CorProf.idl
Biblioteca: CorGuids.lib
Versiones de .NET Framework: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0
Vea también
Referencia
ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 (Método)
Otros recursos
Funciones estáticas globales para generación de perfiles
Historial de cambios
Fecha |
Historial |
Motivo |
---|---|---|
Octubre de 2010 |
Se agregó __stdcall a la sintaxis. |
Comentarios de los clientes. |