Функция StackSnapshotCallback
Предоставляет профилировщику сведения о каждом управляемом кадре и каждом запуске неуправляемых кадров в стеке во время стека, который инициируется методом ICorProfilerInfo2::D oStackSnapshot .
Синтаксис
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] Указатель на структуру Win32 CONTEXT
, представляющую состояние ЦП для этого кадра.
Параметр context
действителен, только если флаг COR_PRF_SNAPSHOT_CONTEXT был передан в ICorProfilerInfo2::DoStackSnapshot
.
clientData
[in] Указатель на клиентские данные, которые передаются прямо из ICorProfilerInfo2::DoStackSnapshot
.
Комментарии
Функция StackSnapshotCallback
реализуется модулем записи профилировщика. Необходимо ограничить сложность работы, выполняемой в StackSnapshotCallback
. Например, при асинхронном использовании ICorProfilerInfo2::DoStackSnapshot
целевой поток может содержать блокировки. Если код внутри StackSnapshotCallback
требует одинаковых блокировок, может возникнуть взаимоблокировка.
Метод ICorProfilerInfo2::DoStackSnapshot
вызывает функцию StackSnapshotCallback
один раз для каждого управляемого кадра или один раз за выполнение неуправляемых кадров. Если StackSnapshotCallback
вызывается для выполнения неуправляемых кадров, профилировщик может использовать контекст регистра (на который ссылается context
параметр) для выполнения собственного неуправляемого обхода стека. В этом случае структура Win32 CONTEXT
представляет состояние ЦП для последнего отправленного кадра в рамках выполнения неуправляемых кадров. Хотя структура Win32 CONTEXT
включает значения для всех регистров, следует полагаться только на значения регистра указателя стека, регистра указателя кадра, регистра указателя инструкций и целочисленных регистров неизменяемых (то есть сохраненных).
Требования
Платформы: см. раздел Требования к системе.
Заголовка: CorProf.idl
Библиотека: CorGuids.lib
платформа .NET Framework версии: доступно с версии 1.0.