StackSnapshotCallback-Funktion
Liefert dem Profiler Informationen über jeden verwalteten Frame und jede Ausführung von nicht verwalteten Frames im Stapel während eines Stackwalks, der von der ICorProfilerInfo2::DoStackSnapshot-Methode initiiert wird.
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
);
Parameter
funcId
[in] Wenn dieser Wert 0 (null) lautet, ist der Rückruf zur Ausführung von nicht verwalteten Frames bestimmt. Andernfalls handelt es sich um den Bezeichner einer verwalteten Funktion, und der Rückruf ist für einen verwalteteten Frame bestimmt.ip
[in] Der Wert des systemeigenen Codeanweisungszeigers im Frame.frameInfo
[in] Ein COR_PRF_FRAME_INFO-Wert, der auf Informationen über den Stapelrahmen verweist. Dieser Wert ist nur während dieses Rückrufs gültig.contextSize
[in] Die Größe der CONTEXT-Struktur, auf die vom context-Parameter verwiesen wird.context
[in] Ein Zeiger auf eine Win32-CONTEXT-Struktur, die den Zustand der CPU für diesen Frame darstellt.Der context-Parameter ist nur gültig, wenn das COR_PRF_SNAPSHOT_CONTEXT-Flag in ICorProfilerInfo2::DoStackSnapshot übergeben wurde.
clientData
[in] Ein Zeiger auf die Clientdaten, die direkt von ICorProfilerInfo2::DoStackSnapshot übergeben werden.
Hinweise
Die StackSnapshotCallback-Funktion wird vom Profilerwriter implementiert. Sie müssen die Komplexität von Arbeiten in StackSnapshotCallback einschränken. Wenn z. B. ICorProfilerInfo2::DoStackSnapshot auf asynchrone Weise verwendet, besitzt der Zielthread möglicherweise Sperren. Wenn Code in StackSnapshotCallback die gleichen Sperren erfordert, könnte ein Deadlock folgen.
Die ICorProfilerInfo2::DoStackSnapshot-Methode ruft die StackSnapshotCallback-Funktion einmal pro verwaltetem Frame oder einmal pro Durchlauf von nicht verwalteten Frames auf. Wenn StackSnapshotCallback für einen Durchlauf von nicht verwalteten Frames aufgerufen wird, kann der Profiler mithilfe des Registerkontexts (auf den durch den context-Parameter verwiesen wird) einen eigenen nicht verwalteten Stackwalk durchführen. In diesem Fall stellt die Win32-CONTEXT-Struktur den CPU-Zustand für das zuletzt abgelegte Frame im Durchlauf nicht verwalteter Frames dar. Die Win32-CONTEXT-Struktur enthält zwar Werte für alle Register, Sie sollten sich aber nur auf die Werte des Stapelzeigerregisters, Framezeigerregisters, Anweisungszeigerregisters und nicht flüchtigen (d. h. konsistenten) Ganzzahlregisters verlassen.
Anforderungen
Plattformen: siehe Systemanforderungen für .NET Framework.
Header: CorProf.idl
Bibliothek: CorGuids.lib
.NET Framework-Versionen: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0
Siehe auch
Referenz
ICorProfilerInfo2::DoStackSnapshot-Methode