Função StackSnapshotCallback

Fornece ao criador de perfil informações sobre cada quadro gerenciado e cada execução de quadros não gerenciados na pilha durante uma movimentação de pilha, que é iniciada pelo método ICorProfilerInfo2::D oStackSnapshot.

Sintaxe

HRESULT __stdcall StackSnapshotCallback (  
    [in] FunctionID funcId,  
    [in] UINT_PTR ip,  
    [in] COR_PRF_FRAME_INFO frameInfo,  
    [in] ULONG32 contextSize,  
    [in] BYTE context[],  
    [in] void *clientData  
);  

Parâmetros

funcId
[in] Se esse valor for zero, esse retorno de chamada será para uma execução de quadros não gerenciados, caso contrário, ele será o identificador de uma função gerenciada e esse retorno de chamada será para um quadro gerenciado.

ip
[in] O valor do ponteiro de instrução de código nativo no quadro.

frameInfo
[in] Um valor COR_PRF_FRAME_INFO que faz referência a informações sobre o registro de ativação. Esse valor é válido para uso somente durante esse retorno de chamada.

contextSize
[in] O tamanho da estrutura CONTEXT, que é referenciada pelo parâmetro context.

context
[in] Um ponteiro para uma estrutura CONTEXT Win32 que representa o estado da CPU para esse quadro.

O parâmetro context será válido somente se o sinalizador COR_PRF_SNAPSHOT_CONTEXT tiver sido passado ICorProfilerInfo2::DoStackSnapshot.

clientData
[in] Um ponteiro para os dados do cliente, que é passado diretamente de ICorProfilerInfo2::DoStackSnapshot.

Comentários

A função StackSnapshotCallback é implementada pelo gravador do criador de perfil. Você deve limitar a complexidade do trabalho feito em StackSnapshotCallback. Por exemplo, ao usar ICorProfilerInfo2::DoStackSnapshot de maneira assíncrona, o thread de destino pode estar mantendo bloqueios. Se o código dentro de StackSnapshotCallback exigir os mesmos bloqueios, pode ocorrer um deadlock.

O método ICorProfilerInfo2::DoStackSnapshot chama a função StackSnapshotCallback uma vez por quadro gerenciado ou uma vez por execução de quadros não gerenciados. Se StackSnapshotCallback for chamado para uma execução de quadros não gerenciados, o criador de perfil poderá usar o contexto de registro (referenciado pelo parâmetro context) para executar sua própria movimentação de pilha não gerenciada. Nesse caso, a estrutura CONTEXT Win32 representa o estado da CPU para o quadro enviado por push mais recentemente na execução de quadros não gerenciados. Embora a estrutura CONTEXT Win32 inclua valores para todos os registros, você deve contar apenas com os valores do registro de ponteiro de pilha, registro de ponteiro de quadro, registro de ponteiro de instrução e os registros inteiros não voláteis (ou seja, preservados).

Requisitos

Plataformas: confira Requisitos do sistema.

Cabeçalho: CorProf.idl

Biblioteca: CorGuids.lib

Versões do .NET Framework: Disponíveis desde a versão 1.0

Confira também