Compartilhar via


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

Confira também