Condividi tramite


Funzione StackSnapshotCallback

Fornisce al profiler le informazioni su ogni frame gestito e ogni esecuzione di frame non gestiti nello stack durante un percorso chiamate nello stack avviato dal metodo ICorProfilerInfo2::DoStackSnapshot.

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
);

Parametri

  • funcId
    [in] Se questo valore vale zero, il callback è per un’esecuzione di frame non gestiti; in caso contrario, è l'identificatore di una funzione gestita e il callback è per un frame gestito.

  • ip
    [in] Il valore del puntatore all'istruzione di codice nativo nel frame.

  • frameInfo
    [in] Valore COR_PRF_FRAME_INFO che fa riferimento alle informazioni su uno stack frame. Questo valore è valido solo per l'utilizzo durante questo callback.

  • contextSize
    [in] Dimensione della struttura CONTEXT, a cui fa riferimento il parametro context.

  • context
    [in] Puntatore a una struttura Win32 CONTEXT che rappresenta lo stato della CPU per questo frame.

    Il parametro context è valido solo se il flag COR_PRF_SNAPSHOT_CONTEXT è stato passato in ICorProfilerInfo2::DoStackSnapshot.

  • clientData
    [in] Puntatore ai dati client, passato direttamente da ICorProfilerInfo2::DoStackSnapshot.

Note

La funzione StackSnapshotCallback viene implementata dal writer del profiler. È necessario limitare la complessità di lavoro fatto in StackSnapshotCallback. Ad esempio, quando si utilizza una modalità asincrona di ICorProfilerInfo2::DoStackSnapshot, il thread di destinazione può contenere blocchi. Se il codice all'interno di StackSnapshotCallback richiede gli stessi blocchi, può verificarsi un deadlock.

Il metodo ICorProfilerInfo2::DoStackSnapshot chiama la funzione StackSnapshotCallback una volta per frame gestito o una volta per esecuzione di frame non gestiti. Se StackSnapshotCallback viene chiamato per un’esecuzione di frame non gestiti, il profiler può utilizzare il contesto del registro (a cui fa riferimento tramite il parametro context) per eseguire la propria analisi dello stack non gestito. In questo caso, la struttura Win32 CONTEXT rappresenta lo stato della CPU per il frame recentemente inserito nell’esecuzione di frame non gestiti. Anche se la struttura Win32 CONTEXT include valori per tutti i registri, è necessario basarsi solo sui valori del registro dei puntatori dello stack, del registro dei puntatori ai frame, del registro dei puntatori alle istruzioni e dei registri integer non volatili (cioè, mantenuti).

Requisiti

Piattaforme: vedere Requisiti di sistema di .NET Framework.

Intestazione: CorProf.idl

Libreria: CorGuids.lib

Versioni di .NET Framework: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0

Vedere anche

Riferimenti

Metodo ICorProfilerInfo2::DoStackSnapshot

Altre risorse

Funzioni statiche globali di profilatura