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