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, диспетчер пошагового выполнения установит это поле, чтобы упростить возврат к исходному шагу, если шаг перекрестного потока завершается сбоем или требует отката. Не рекомендуется. Вместо этого используйте GetCrossThreadParent.

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

Идентифицирует источник объекта . SourceId используются для включения фильтрации в сценариях, когда несколько компонентов могут создавать экземпляры класса. Например, исходные идентификаторы можно использовать для определения того, исходит ли точка останова из 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)

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

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

GetControllingRuntimeInstance()

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

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

GetCrossThreadParent()

Используйте вместо CrossThreadParent.

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

Этот API появился в Visual Studio 16 с обновлением 9 (DkmApiVersion.VS16Update9).

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()

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

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