Função FunctionLeave2
Notifica o gerador de perfis de que uma função está prestes a regressar ao autor da chamada e fornece informações sobre a moldura da pilha e o valor devolvido da função.
Sintaxe
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] O identificador da função que está a ser devolvida.
clientData
[in] O identificador de função remapped, que o profiler especificou anteriormente através da função FunctionIDMapper .
func
[in] Um COR_PRF_FRAME_INFO
valor que aponta para informações sobre a moldura da pilha.
O gerador de perfis deve tratar isto como uma alça opaca que pode ser transmitida de volta para o motor de execução no método ICorProfilerInfo2::GetFunctionInfo2 .
retvalRange
[in] Um ponteiro para uma estrutura COR_PRF_FUNCTION_ARGUMENT_RANGE que especifica a localização da memória do valor devolvido da função.
Para aceder às informações de valor devolvido, o COR_PRF_ENABLE_FUNCTION_RETVAL
sinalizador tem de ser definido. O profiler pode utilizar o método ICorProfilerInfo::SetEventMask para definir os sinalizadores de eventos.
Observações
Os valores dos func
parâmetros e retvalRange
não são válidos após a FunctionLeave2
função ser devolvida porque os valores podem ser alterados ou destruídos.
A FunctionLeave2
função é uma chamada de retorno; tem de implementá-la. A implementação tem de utilizar o __declspec
atributo da classe de armazenamento (naked
).
O motor de execução não guarda registos antes de chamar esta função.
À entrada, tem de guardar todos os registos que utiliza, incluindo os da unidade de vírgula flutuante (FPU).
Ao sair, tem de restaurar a pilha ao remover todos os parâmetros que foram emitidos pelo autor da chamada.
A implementação de FunctionLeave2
não deve ser bloqueada porque irá atrasar a recolha de lixo. A implementação não deve tentar uma libertação de lixo porque a pilha pode não estar num estado compatível com a libertação da memória. Se for tentada uma libertação de lixo, o runtime bloqueará até FunctionLeave2
ser devolvido.
Além disso, a FunctionLeave2
função não pode chamar para o código gerido ou, de alguma forma, causar uma alocação de memória gerida.
Requisitos
Plataformas: Veja Requisitos do Sistema.
Cabeçalho: CorProf.idl
Biblioteca: CorGuids.lib
.NET Framework Versões: Disponível desde 2.0