Condividi tramite


Funzione StackSnapshotCallback

Fornisce al profiler informazioni su ogni fotogramma gestito e su ogni esecuzione di fotogrammi non gestiti nello stack durante una procedura dettagliata dello stack, avviata dal metodo ICorProfilerInfo2::D oStackSnapshot .

Sintassi

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 è zero, questo callback è per un'esecuzione di frame non gestiti; in caso contrario, è l'identificatore di una funzione gestita e questo callback è per un frame gestito.

ip
[in] Valore del puntatore all'istruzione del codice nativo nel frame.

frameInfo
[in] Valore COR_PRF_FRAME_INFO che fa riferimento a informazioni sullo stack frame. Questo valore è valido solo durante questo callback.

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

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

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

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

Commenti

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

Il ICorProfilerInfo2::DoStackSnapshot metodo chiama la StackSnapshotCallback funzione una volta per ogni frame gestito o una volta per ogni esecuzione di frame non gestiti. Se StackSnapshotCallback viene chiamato per un'esecuzione di frame non gestiti, il profiler può usare il contesto del registro (a cui fa riferimento il context parametro ) per eseguire la propria procedura dettagliata dello stack non gestito. In questo caso, la struttura Win32 CONTEXT rappresenta lo stato della CPU per il fotogramma di cui è stato eseguito il push più di recente all'interno dell'esecuzione di frame non gestiti. Anche se la struttura Win32 CONTEXT include valori per tutti i registri, è consigliabile basarsi solo sui valori del registro del puntatore dello stack, del registro del puntatore dei fotogrammi, del registro del puntatore all'istruzione e dei registri interi nonvolatili (ovvero mantenuti).

Requisiti

Piattaforme: vedere Requisiti di sistema di .NET Framework.

Intestazione: CorProf.idl

Libreria: CorGuids.lib

Versioni di .NET Framework: Disponibile dalla versione 1.0

Vedi anche