Freigeben über


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

Siehe auch