共用方式為


StackSnapshotCallback 函式

對分析工具提供每個 Managed 框架的相關資訊,以及每次堆疊查核行程 (Stack Walk) 期間在堆疊上執行 Unmanaged 框架的資訊,而堆疊查核行程則是透過 ICorProfilerInfo2::DoStackSnapshot 方法啟始。

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
);

參數

  • funcId
    [in] 如果這個值為零,這個回呼就是用於執行 Unmanaged 框架,否則,它就是 Managed 函式的識別項,而且這個回呼是用於 Managed 框架。

  • ip
    [in] 框架中機器碼指令指標的值。

  • frameInfo
    [in] 參考堆疊框架相關資訊的 COR_PRF_FRAME_INFO 值。 只有在這個回呼期間,這個值才有效。

  • contextSize
    [in] CONTEXT 結構的大小,這個結構由 context 參數所參考。

  • context
    [in] Win32 CONTEXT 結構的指標,表示這個框架的 CPU 狀態。

    只有在 COR_PRF_SNAPSHOT_CONTEXT 旗標已傳入 ICorProfilerInfo2::DoStackSnapshot 時,context 參數才是有效的。

  • clientData
    [in] 用戶端資料的指標,此資訊是從 ICorProfilerInfo2::DoStackSnapshot 直接傳遞。

備註

StackSnapshotCallback 函式是由分析工具寫入器實作。 您必須限制 StackSnapshotCallback 中執行工作的複雜度。 例如,以非同步模式使用 ICorProfilerInfo2::DoStackSnapshot 時,目標執行緒可能會保留鎖定。 如果 StackSnapshotCallback 內的程式碼需要相同鎖定,就會發生死結。

ICorProfilerInfo2::DoStackSnapshot 方法會在每個 Managed 框架或每次執行 Unmanaged 框架時呼叫一次 StackSnapshotCallback 函式。 如果針對 Unmanaged 框架執行呼叫了 StackSnapshotCallback,分析工具可以使用暫存器內容 (由 context 參數所參考),來執行它自己的 Unmanaged 堆疊查核行程。 在這種狀況下,Win32 CONTEXT 結構表示 Unmanaged 框架執行內最近推入框架的 CPU 狀態。 雖然 Win32 CONTEXT 結構包含所有暫存器的值,但您應該只信任堆疊指標暫存器、框架指標暫存器、指令指標暫存器和靜態 (即保留) 之整數暫存器的值。

需求

**平台:**請參閱 .NET Framework 系統需求

**標頭:**CorProf.idl

**程式庫:**CorGuids.lib

**.NET Framework 版本:**4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1、1.0

請參閱

參考

ICorProfilerInfo2::DoStackSnapshot 方法

其他資源

分析全域靜態函式