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 方法