Função FunctionLeave2
Notifica o criador de perfil de que uma função está prestes a retornar ao chamador e fornece informações sobre o valor retornado da função e do registro de ativaçã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á retornando.
clientData
[in] O identificador de função remapeado, que o criador de perfil especificou anteriormente por meio da função FunctionIDMapper .
func
[in] Um valor COR_PRF_FRAME_INFO
que aponta para informações sobre o registro de ativação.
O criador de perfil deve tratar isso como um identificador opaco que pode ser retornado para o mecanismo de execução no método ICorProfilerInfo2::GetFunctionInfo2.
retvalRange
[in] Um ponteiro para uma estrutura de COR_PRF_FUNCTION_ARGUMENT_RANGE que especifica o local de memória do valor retornado da função.
Para acessar informações de valor retornado, o sinalizador COR_PRF_ENABLE_FUNCTION_RETVAL
precisa ser definido. O criador de perfil pode usar o método ICorProfilerInfo::SetEventMask para definir os sinalizadores de evento.
Comentários
Os valores dos parâmetros func
e retvalRange
não são válidos após o retorno da função FunctionLeave2
porque eles podem ser alterados ou destruídos.
A função FunctionLeave2
é um retorno de chamada e você precisa implementá-la. A implementação precisa usar o atributo __declspec
(naked
) da classe de armazenamento.
O mecanismo de execução não salva nenhum registro antes de chamar essa função.
Na entrada, você precisa salvar todos os registros usados, incluindo aqueles na FPU (unidade de ponto flutuante).
Na saída, você deve restaurar a pilha removendo todos os parâmetros que foram enviados por push pelo chamador.
A implementação de FunctionLeave2
não deve ser bloqueada porque atrasará a coleta de lixo. A implementação não deve tentar fazer uma coleta de lixo porque a pilha pode não estar em um estado adequado para a coleta de lixo. Se houver uma tentativa de coleta de lixo, o runtime será bloqueado até retornar FunctionLeave2
.
Além disso, a função FunctionLeave2
não deve chamar o código gerenciado ou de alguma forma causar uma alocação de memória gerenciada.
Requisitos
Plataformas: confira Requisitos do sistema.
Cabeçalho: CorProf.idl
Biblioteca: CorGuids.lib
Versões do .NET Framework: disponíveis desde 2.0