StackSnapshotCallback-Funktion
Stellt dem Profiler Informationen zu jedem verwalteten Frame und jeder Ausführung nicht verwalteter Frames für den Stapel während eines Stapellaufs bereit, der von der Methode ICorProfilerInfo2::D oStackSnapshot initiiert wird.
Syntax
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 Null ist, ist dieser Rückruf für eine Ausführung nicht verwalteter Frames vorgesehen. Andernfalls handelt es sich um den Bezeichner einer verwalteten Funktion, und dieser Rückruf gilt für einen verwalteten Frame.
ip
[in] Der Wert des nativen Codeanweisungszeigers im Frame.
frameInfo
[in] Ein COR_PRF_FRAME_INFO
-Wert, der auf Informationen zu einem Stapelrahmen verweist. Dieser Wert ist nur für die Verwendung während dieses Rückrufs gültig.
contextSize
[in] Die Größe der CONTEXT
-Struktur, auf die vom Parameter context
verwiesen wird.
context
[in] Ein Zeiger auf die Win32-Struktur CONTEXT
, die den Zustand der CPU für diesen Frame darstellt.
Der Parameter context
ist nur gültig, wenn das Flag COR_PRF_SNAPSHOT_CONTEXT in ICorProfilerInfo2::DoStackSnapshot
übergeben wurde.
clientData
[in] Ein Zeiger auf die Clientdaten, die direkt von ICorProfilerInfo2::DoStackSnapshot
übergeben werden.
Bemerkungen
Diese StackSnapshotCallback
-Funktion wird vom Profiler-Writer implementiert. Sie müssen die Komplexität der in StackSnapshotCallback
ausgeführten Vorgänge begrenzen. Wenn Sie ICorProfilerInfo2::DoStackSnapshot
z. B. asynchron verwenden, kann der Zielthread Sperren enthalten. Wenn Code in StackSnapshotCallback
die gleichen Sperren erfordert, kann es zu einem Deadlock kommen.
Die ICorProfilerInfo2::DoStackSnapshot
-Methode ruft die StackSnapshotCallback
-Funktion einmal pro verwaltetem Frame oder einmal pro Ausführung nicht verwalteter Frames auf. Wenn StackSnapshotCallback
für eine Ausführung nicht verwalteter Frames aufgerufen wird, kann der Profiler den Registerkontext (auf den der context
-Parameter verweist) verwenden, um einen eigenen nicht verwalteten Stapellauf auszuführen. In diesem Fall stellt die Win32-Struktur CONTEXT
den CPU-Zustand für den zuletzt gepushten Frame innerhalb der Ausführung nicht verwalteter Frames dar. Obwohl die Win32-Struktur CONTEXT
Werte für alle Register enthält, sollten Sie sich nur auf die Werte des Stapelzeigerregisters, des Framezeigerregisters, des Anweisungszeigerregisters und der nicht flüchtigen (d. h. beibehaltenen) ganzzahligen Register verlassen.
Anforderungen
Plattformen: Informationen finden Sie unter Systemanforderungen.
Header: CorProf.idl
Bibliothek: CorGuids.lib
.NET Framework-Versionen: Seit Version 1.0 verfügbar