Função FunctionEnter2
Notifica o criador de perfil de que o controle está sendo transmitido para uma função e fornece informações sobre o registro de ativação e os argumentos da função. Essa função substitui a função FunctionEnter.
Sintaxe
void __stdcall FunctionEnter2 (
[in] FunctionID funcId,
[in] UINT_PTR clientData,
[in] COR_PRF_FRAME_INFO func,
[in] COR_PRF_FUNCTION_ARGUMENT_INFO *argumentInfo
);
Parâmetros
funcId
[in] O identificador da função para a qual o controle é transmitido.
clientData
[in] O identificador de função remapeado, que o criador de perfil especificou anteriormente usando a função FunctionIDMapper.
func
[in] Um valor COR_PRF_FRAME_INFO
que aponta para as 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.
argumentInfo
[in] Um ponteiro para uma estrutura COR_PRF_FUNCTION_ARGUMENT_INFO que especifica os locais na memória dos argumentos da função.
Para acessar informações de argumento, o sinalizador COR_PRF_ENABLE_FUNCTION_ARGS
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 argumentInfo
não são válidos após o retorno da função FunctionEnter2
porque eles podem ser alterados ou destruídos.
A função FunctionEnter2
é 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 FunctionEnter2
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 FunctionEnter2
.
Além disso, a função FunctionEnter2
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