StackSnapshotCallback (fonction)
Fournit au profileur des informations sur chaque cadre managé et chaque exécution de cadres non managés sur la pile pendant une procédure de pile, qui est lancée par la méthode ICorProfilerInfo2::DoStackSnapshot.
Syntaxe
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
);
Paramètres
funcId
[in] Si cette valeur est égale à zéro, ce rappel est destiné à une exécution de cadres non managés ; sinon, il s’agit de l’identificateur d’une fonction managée et de ce rappel est destiné à un cadre managé.
ip
[in] Valeur du pointeur d’instruction de code natif dans le cadre.
frameInfo
[in] Valeur COR_PRF_FRAME_INFO
qui fait référence aux informations sur le frame de pile. Cette valeur est valide uniquement pendant ce rappel.
contextSize
[in] Taille de la structure CONTEXT
, référencée par le paramètre context
.
context
[in] Pointeur vers une structure Win32 CONTEXT
qui représente l’état de l’UC pour ce cadre.
Le paramètre context
est valide uniquement si l’indicateur de COR_PRF_SNAPSHOT_CONTEXT a été passé dans ICorProfilerInfo2::DoStackSnapshot
.
clientData
[in] Pointeur vers les données clientes, qui est passé directement à partir de ICorProfilerInfo2::DoStackSnapshot
.
Notes
La fonction StackSnapshotCallback
est implémentée par l’enregistreur du profileur. Vous devez limiter la complexité du travail effectué dans StackSnapshotCallback
. Par exemple, lors de l’utilisation de ICorProfilerInfo2::DoStackSnapshot
de manière asynchrone, le thread cible peut contenir des verrous. Si le code dans StackSnapshotCallback
nécessite les mêmes verrous, un interblocage peut survenir.
La méthode ICorProfilerInfo2::DoStackSnapshot
appelle la fonction StackSnapshotCallback
une fois par cadre managé ou une fois par exécution de cadres non managés. Si StackSnapshotCallback
est appelé pour une exécution de cadres non managés, le profileur peut utiliser le contexte de registre (référencé par le paramètre context
) pour effectuer son propre parcours de pile non managée. Dans ce cas, la structure Win32 CONTEXT
représente l’état de l’UC pour le dernier cadre envoyé dans l’exécution de cadres non managés. Bien que la structure Win32 CONTEXT
inclut des valeurs pour tous les registres, vous devez vous appuyer uniquement sur les valeurs du registre du pointeur de pile, le registre du pointeur de cadre, le registre du pointeur d’instruction et les registres entiers non volatiles (autrement dit, conservés).
Spécifications
Plateformes : Consultez Configuration requise.
Header: CorProf.idl
Bibliothèque : CorGuids.lib
Versions de .NET Framework : Disponible à partir de la version 1.0