共用方式為


StackSnapshotCallback 函式

更新:2007 年 11 月

對分析工具提供每個 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 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1、1.0

請參閱

參考

ICorProfilerInfo2::DoStackSnapshot 方法

其他資源

分析全域靜態函式