DkmStepper Класс

Определение

DkmStepper представляет запрос на шаг потока. Это упрощает общее время существования объекта между различными мониторами отладки среды выполнения, которые участвуют в пошаговом выполнении.

public ref class DkmStepper : Microsoft::VisualStudio::Debugger::DkmDataContainer, IDisposable
[System.Runtime.InteropServices.Guid("2aae9764-33a3-8fc7-22ff-e27c9de91bda")]
public class DkmStepper : Microsoft.VisualStudio.Debugger.DkmDataContainer, IDisposable
[<System.Runtime.InteropServices.Guid("2aae9764-33a3-8fc7-22ff-e27c9de91bda")>]
type DkmStepper = class
    inherit DkmDataContainer
    interface IDisposable
Public Class DkmStepper
Inherits DkmDataContainer
Implements IDisposable
Наследование
Атрибуты
Реализации

Свойства

CodePath

[Необязательно] Если stepKind имеет значение StepIntoSpecific, указывает, к какому вызову мы переходим. В противном случае он имеет значение NULL.

CrossThreadParent

[Необязательно] Если новый шаговый модуль создается с помощью OnCrossThreadStepArbitration, диспетчер пошагового выполнения установит это поле так, чтобы было легко вернуться к исходному шагу, если шаг перекрестного потока завершается сбоем или требует отката.

CurrentCodePaths

[Необязательно] В управляемой отладке он содержит все пути кода в текущем диапазоне шагов. В противном случае он имеет значение NULL.

Этот API появился в Visual Studio 12 RTM (DkmApiVersion.VS12RTM).

CurrentMethodName

[Необязательно] В управляемой отладке он содержит текущее имя метода. В противном случае он имеет значение NULL.

Этот API появился в Visual Studio 12 RTM (DkmApiVersion.VS12RTM).

FrameBase

Основание первого кадра в начале шага. Это значение будет MAXUINT64, если параметр StartingAddress не указан.

IsUnloaded

Возвращает значение true, если для этого объекта было вызвано событие "unloaded" (например, вызывается DkmThread::Unload) или если объект был закрыт. Обратите внимание, что при проверке этого состояния необходимо соблюдать осторожность, так как без синхронизации возвращаемое состояние может быть не точным после прочтения инструкции.

(Унаследовано от DkmDataContainer)
ShouldCaptureReturnValue

В управляемой отладке он указывает, хочет ли шаговый модуль записать возвращаемое значение во время пошагового выполнения. Значение по умолчанию — false.

Этот API появился в Visual Studio 12 RTM (DkmApiVersion.VS12RTM).

SourceId

Идентифицирует источник объекта . SourceIds используются для включения фильтрации в сценариях, когда несколько компонентов могут создавать экземпляры класса. Например, идентификаторы источника можно использовать для определения того, поступает ли точка останова из AD7 AL (например, точка останова пользователя или другая точка останова, видимая на уровне SDM), а не точка останова, которая может быть создана другим компонентом (например, внутренней точкой останова, используемой для пошагового выполнения).

StartingAddress

[Необязательно] Адрес инструкции процесса на момент запуска этого шага. Это значение будет иметь значение NULL, если шаг был создан в потоке без кадров (скрипт & только управляемый).

StepKind

DkmStepKind описывает, как выполнить шаг потока при вызове метода Step.

StepUnit

DkmStepUnit описывает степень детализации шага при вызове метода Step.

Thread

DkmThread представляет поток, выполняющийся в целевом процессе.

UniqueId

Guid, который однозначно идентифицирует этот DkmStepper.

Методы

BeforeEnable()

Вызывается диспетчером событий остановки до фактического начала операции шага. Диспетчер событий остановки уведомит все экземпляры среды выполнения, чтобы они могли настроить любое необходимое состояние, прежде чем диспетчер событий остановки начнет блокировать вычисления функций.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

CancelStepper(DkmRuntimeInstance)

Позволяет отменить шаговую операцию после создания управляющего экземпляра среды выполнения. Вызывающий экземпляр среды выполнения должен соответствовать текущему экземпляру управляющего экземпляра среды выполнения. Обычно используется в сценариях пошагового выполнения между потоками, где можно повторно активировать исходный шаг. Диспетчер пошагового выполнения закроет шаг и не отправит шаг завершен.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

Close()

Закрывает объект пошагового шага. Он должен быть закрыт компонентами при выполнении шага, например при подавлении события завершения шага или в случае сбоя инициализации пошагового элемента. Степеры будут неявно закрыты, если их поток завершает работу или отладчик останавливается. Они будут закрыты диспетчером пошагового выполнения, если будет выдан другой запрос на выполнение на уровне пользователя.

Объекты DkmStepper автоматически закрываются при закрытии связанного с ними объекта DkmThread.

Create(DkmThread, DkmInstructionAddress, UInt64, DkmStepKind, DkmStepUnit, Guid, DkmSteppingCodePath, DkmStepper, Boolean, ReadOnlyCollection<DkmSteppingCodePath>, String, DkmDataItem)

Объекты DkmStepper создаются компонентами, которые хотят выполнить шаг. Степеры уровня пользователя создаются AD7-AL. Чтобы инициализировать объект пошагового выполнения, необходимо вызвать Enable. Объекты stepper будут жить до завершения или прерывания шага.

Этот API появился в Visual Studio 12 RTM (DkmApiVersion.VS12RTM).

Create(DkmThread, DkmInstructionAddress, UInt64, DkmStepKind, DkmStepUnit, Guid, DkmSteppingCodePath, DkmStepper, DkmDataItem)

Объекты DkmStepper создаются компонентами, которые хотят выполнить шаг. Степеры уровня пользователя создаются AD7-AL. Чтобы инициализировать объект пошагового выполнения, необходимо вызвать Enable. Объекты stepper будут жить до завершения или прерывания шага.

Enable(Boolean)

Используется для инициализации объекта stepper, чтобы шаг выполнялся при следующем возобновлении выполнения. Этот метод реализуется диспетчером пошагового выполнения путем поиска соответствующего монитора отладки среды выполнения и запроса на настройку этого монитора отладки среды выполнения. Этот метод должен вызываться только один раз для заданного объекта пошагового шага.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

GetControllingRuntimeInstance()

Возвращает экземпляр среды выполнения, который в настоящее время управляет этим DkmStepper.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

GetCrossThreadParent()

DkmStepper представляет запрос на шаг потока. Это упрощает общее время существования объекта между различными мониторами отладки среды выполнения, которые участвуют в пошаговом выполнении.

GetDataItem<T>()

Возвращает экземпляр T, который был добавлен в этот экземпляр контейнера. Если этот контейнер не содержит "T", эта функция возвращает значение NULL.

(Унаследовано от DkmDataContainer)
IsExceptionInFlight()

Получает флаг DkmStepper, который указывает, что монитор среды выполнения считает, что исключение в настоящее время находится в режиме выполнения на этом шаге. Это может использоваться мониторами среды выполнения для изменения поведения пошагового выполнения.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

Этот API появился в Visual Studio 11 с обновлением 1 (DkmApiVersion.VS11FeaturePack1).

OnCrossThreadStepArbitration(DkmStepArbitrationReason, DkmRuntimeInstance, DkmThread, DkmInstructionAddress, DkmStepper)

Вызывается монитором среды выполнения, когда шаг продолжается в другом потоке. Диспетчер пошагового выполнения создаст новый DkmStepper, который будет использоваться в новом потоке, и инициирует арбитраж шагов, чтобы определить, какая среда выполнения должна завершить этот шаг так же, как это делает OnStepArbitration. Новый шаговой модуль использует тот же тип шага и единицу шага, что и исходный шаг. Необходимо указать новый адрес начальной инструкции, который будет указан в качестве начального адреса шага. Исходный степпер остается активным, и после завершения нового шага диспетчер пошагового выполнения подавит событие и уведомит исходного шагера о завершении.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

OnReturnValues(ReadOnlyCollection<DkmRawReturnValue>, Boolean)

Вызов события ReturnValues. Компоненты, реализующие интерфейс приемника событий, получат уведомление о событии. Элемент управления возвращается после уведомления всех компонентов.

OnStepArbitration(DkmStepArbitrationReason, DkmRuntimeInstance)

Вызывается монитором среды выполнения, когда шаг вышел из пределов того, что монитор среды выполнения понимает или во время шага обнаружен потенциальный переход в другую среду выполнения. Диспетчер пошагового выполнения инициирует арбитраж шагов, чтобы предоставить каждому монитору среды выполнения возможность проверить процесс и определить, какая среда выполнения должна завершить этот шаг. Среды выполнения вызываются в порядке приоритета. После завершения этого процесса диспетчер шагов вызовет AfterSteppingArbitration на мониторе, который запросил арбитраж, чтобы он смог отреагировать на новый контрольный монитор, если он был найден, или завершить шаг, если он не был найден.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

OnStepComplete(DkmThread, Boolean)

Вызов события StepComplete. Компоненты, реализующие интерфейс приемника событий, получат уведомление о событии. Этот метод поставить событие в очередь, а элемент управления немедленно вернется вызывающей объекту.

RemoveDataItem<T>()

Удалите экземпляр T из этого контейнера. Обычно не требуется вызывать этот метод, так как контейнер данных автоматически очищается при закрытии объекта.

(Унаследовано от DkmDataContainer)
SetDataItem<T>(DkmDataCreationDisposition, T)

Поместите новый элемент в контейнер данных.

(Унаследовано от DkmDataContainer)
SetExceptionInFlight(Boolean)

Мониторы среды выполнения вызывают этот метод, чтобы установить или снять флаг в DkmStepper, который может использоваться совместно используемыми средами выполнения для изменения поведения пошагового выполнения, если исключение в настоящее время находится в тестовом режиме. Вызывается мониторами среды выполнения при обнаружении исключения во время пошагового выполнения.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

Этот API появился в Visual Studio 11 с обновлением 1 (DkmApiVersion.VS11FeaturePack1).

StepControlRequested(DkmStepArbitrationReason, DkmRuntimeInstance)

StepControlRequested вызывается, когда неуправляемый экземпляр среды выполнения обнаруживает, что поток достиг перехода в свою среду выполнения. Диспетчер пошагового выполнения перенаправит вызов в текущий экземпляр управляющего экземпляра среды выполнения. Если текущий управляющий экземпляр среды выполнения может прекратить пошаговое выполнение, ему следует задать для параметра Granted значение true. Фактический элемент управления не предоставляется, пока запрашивающая среда выполнения не вызовет DkmStepper.TakeStepControl. Этот процесс из двух частей позволяет вызывающим абонентам запрашивать управление несколькими степперами одновременно.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

TakeStepControl(Boolean, DkmStepArbitrationReason, DkmRuntimeInstance)

Метод TakeStepControl вызывается, когда неуправляемый экземпляр среды выполнения обнаруживает, что поток достиг перехода в свою среду выполнения. Диспетчер пошагового выполнения перенаправит вызов в текущий экземпляр управляющего экземпляра среды выполнения. Экземпляр среды выполнения, запрашивающий элемент управления, должен сначала вызвать StepControlRequested для всех степеров, которые ему требуется контролировать. Если для всех них задано значение "Предоставлено" значение true, экземпляр среды выполнения должен вызывать этот метод в каждом пошаговом элементе, которым он управляет.

Ограничение расположения. API должен вызываться из компонента Monitor (уровень < компонента 100 000).

Явные реализации интерфейса

IDisposable.Dispose()

Будет добавлено.

Применяется к