StackSnapshotCallback 函式
在堆疊查核期間,向分析工具提供堆疊上每個受控框架和每個受控框架執行的相關資訊,這是由 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] 如果此值為零,則此回呼適用於非受控框架的執行;否則,它會是受控函式的識別碼,而且此回呼會適用於受控框架。
ip
[in] 框架中機器碼指令指標的值。
frameInfo
[in] 參考堆疊框架相關資訊的 COR_PRF_FRAME_INFO
值。 這個值只有在這個回呼期間才能有效使用。
contextSize
[in] context
參數所參考的 CONTEXT
結構大小。
context
[in] 代表此框架 CPU 狀態的 Win32 CONTEXT
結構指標。
只有在 ICorProfilerInfo2::DoStackSnapshot
中傳遞 COR_PRF_SNAPSHOT_CONTEXT 旗標時,context
參數才有效。
clientData
[in] 用戶端資料的指標,會從 ICorProfilerInfo2::DoStackSnapshot
直接傳遞。
備註
StackSnapshotCallback
函式會由分析工具寫入器實作。 您必須限制在 StackSnapshotCallback
中完成的工作複雜度。 例如,以非同步方式使用 ICorProfilerInfo2::DoStackSnapshot
時,目標執行緒可能會保留鎖定。 如果 StackSnapshotCallback
內的程式碼需要相同的鎖定,便會隨之發生死結。
ICorProfilerInfo2::DoStackSnapshot
方法會針對每個受控框架呼叫 StackSnapshotCallback
函式一次,或每次執行非受控框架時呼叫一次。 如果針對非受控框架的執行呼叫 StackSnapshotCallback
,分析工具可能會使用暫存器內容 (context
參數所參考) 來執行自己的非受控堆疊查核。 在此情況下,Win32 CONTEXT
結構代表非受控框架執行期間最近推送之框架的 CPU 狀態。 雖然 Win32 CONTEXT
結構包含所有暫存器的值,但您只應依賴堆疊指標暫存器、框架指標暫存器、指令指標暫存器和靜態 (即保留的) 整數暫存器的值。
規格需求
平台:請參閱系統需求。
標頭:CorProf.idl
程式庫:CorGuids.lib
.NET Framework版本:自 1.0 起提供