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

步骤开始时第一个帧的框架基。 如果未指定 StartingAddress,则将MAXUINT64此值。

IsUnloaded

如果已为此对象引发“unloaded”事件,则返回 true (示例:DkmThread::Unload) 或对象已关闭。 请注意,检查此状态时必须小心,因为如果不进行同步,则返回的状态在读取指令后可能不再准确。

(继承自 DkmDataContainer)
ShouldCaptureReturnValue

在托管调试中,它指示步进器是否要在单步执行期间捕获返回值。 默认值为 false。

此 API 是在 Visual Studio 12 RTM (DkmApiVersion.VS12RTM) 中引入的。

SourceId

标识对象的源。 SourceId 用于在多个组件可能创建类实例的情况下启用筛选。 例如,源 ID 可用于确定断点是来自 AD7 AL (例如用户断点,还是来自 SDM 级别) 可见的其他断点,而不是可能由其他组件创建的断点 (例如用于单步) 的内部断点。

StartingAddress

[可选]开始此步骤时进程的指令地址。 如果步骤源自没有帧 (脚本 & 仅托管) 的线程上,则为 NULL。

StepKind

DkmStepKind 介绍如何在调用 Step 方法时单步执行线程。

StepUnit

DkmStepUnit 描述调用 Step 方法时步骤的粒度。

Thread

DkmThread 表示在目标进程中运行的线程。

UniqueId

唯一标识此 DkmStepper 的 Guid。

方法

BeforeEnable()

在步骤操作实际开始之前由停止事件管理器调用 停止事件管理器将通知所有运行时实例,以便它们可以在停止事件管理器开始阻止函数评估之前设置任何必要的状态。

位置约束:必须从监视组件 (组件级别 < 100,000) 调用 API。

CancelStepper(DkmRuntimeInstance)

允许在控制运行时实例创建后取消步进器。 调用运行时实例必须与当前控制运行时实例匹配。 这通常用于可以重新激活原始步进器的跨线程步进方案。 单步执行管理器将关闭步进器,但不发送步骤完成。

位置约束:必须从监视组件 (组件级别 < 100,000) 调用 API。

Close()

关闭步进器对象。 当步进器完成时(例如,当步骤完成事件被禁止时,或者步进器无法初始化时),组件应将其关闭。 如果步进器线程退出或调试器已停止,则步进器将隐式关闭。 如果发出不同的用户级别执行请求,则单步执行管理器会关闭它们。

当其关联的 DkmThread 对象关闭时,DkmStepper 对象会自动关闭。

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

DkmStepper 对象由要发出步骤的组件创建。 用户级步进器由 AD7-AL 创建。 若要初始化步进器对象,必须调用 Enable。 步进器对象将一直持续到步骤完成或中止。

此 API 是在 Visual Studio 12 RTM (DkmApiVersion.VS12RTM) 中引入的。

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

DkmStepper 对象由要发出步骤的组件创建。 用户级步进器由 AD7-AL 创建。 若要初始化步进器对象,必须调用 Enable。 步进器对象将一直持续到步骤完成或中止。

Enable(Boolean)

用于初始化步进器对象,以便在下一次恢复执行时执行步骤。 此方法由单步执行管理器通过查找适当的运行时调试监视器并要求此运行时调试监视器设置步骤来实现。 对于给定的步进器对象,此方法只能调用一次。

位置约束:必须从监视组件 (组件级别 < 100,000) 调用 API。

GetControllingRuntimeInstance()

返回此 DkmStepper 当前控制的运行时实例。

位置约束:必须从监视组件 (组件级别 < 100,000) 调用 API。

GetCrossThreadParent()

使用 而不是 CrossThreadParent。

位置约束:必须从监视组件 (组件级别 < 100,000) 调用 API。

此 API 是在 Visual Studio 16 Update 9 (DkmApiVersion.VS16Update9) 中引入的。

GetDataItem<T>()

获取已添加到此容器实例的“T”实例。 如果此容器不包含“T”,则此函数将返回 null。

(继承自 DkmDataContainer)
IsExceptionInFlight()

获取 DkmStepper 上的标志,该标志指示运行时监视器是否认为在此步骤中当前存在异常。 运行时监视器可以使用它来更改单步执行的行为。

位置约束:必须从监视组件 (组件级别 < 100,000) 调用 API。

此 API 是在 Visual Studio 11 Update 1 (DkmApiVersion.VS11FeaturePack1) 中引入的。

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

当某个步骤在不同的线程上继续时,由运行时监视器调用。 单步执行管理器将创建一个新的 DkmStepper 以用于新线程,并启动单步执行仲裁,以确定哪个运行时应像 OnStepArbitration 一样完成该步骤。 新的步进器使用与原始步进器相同的步进类型和步进单位。 必须提供新的起始指令地址,并将其设置为步进器的起始地址。 原始步进器将保持活动状态,当新的步进器完成时,步进管理器将禁止该事件并通知原始步进器完成。

位置约束:必须从监视组件 (组件级别 < 100,000) 调用 API。

OnReturnValues(ReadOnlyCollection<DkmRawReturnValue>, Boolean)

引发 ReturnValues 事件。 实现事件接收器接口的组件将收到事件通知。 一旦通知所有组件,控件将返回。

OnStepArbitration(DkmStepArbitrationReason, DkmRuntimeInstance)

当某个步骤已离开运行时监视器所理解内容的限制或在步骤中遇到可能转换到另一个运行时时,由运行时监视器调用。 单步执行管理器将启动单步仲裁,让每个运行时监视器有机会检查进程并确定哪个运行时应完成此步骤。 运行时按优先级顺序调用。 此过程完成后,单步执行管理器将在请求仲裁的监视器上调用 AfterSteppingArbitration,以便它可以响应新的控制监视器(如果找到),或者完成步骤(如果未找到)。

位置约束:必须从监视组件 (组件级别 < 100,000) 调用 API。

OnStepComplete(DkmThread, Boolean)

引发 StepComplete 事件。 实现事件接收器接口的组件将收到事件通知。 此方法将排队事件,控件将立即返回到调用方。

RemoveDataItem<T>()

从此容器中删除“T”的实例。 通常不需要调用此方法,因为数据容器将在对象关闭时自动清空。

(继承自 DkmDataContainer)
SetDataItem<T>(DkmDataCreationDisposition, T)

将新项放在数据容器中。

(继承自 DkmDataContainer)
SetExceptionInFlight(Boolean)

运行时监视器调用此项以在 DkmStepper 上设置或清除一个标志,该标志可由协作运行时使用,以在当前异常处于未执行状态时更改单步执行的行为。 在单步执行时遇到异常时,由运行时监视调用。

位置约束:必须从监视组件 (组件级别 < 100,000) 调用 API。

此 API 是在 Visual Studio 11 Update 1 (DkmApiVersion.VS11FeaturePack1) 中引入的。

StepControlRequested(DkmStepArbitrationReason, DkmRuntimeInstance)

当非控制运行时实例检测到线程已转换到其运行时时,将调用 StepControlRequested。 单步执行管理器会将调用转发到当前控制运行时实例。 如果当前控制运行时实例可以停止单步执行,则应将 Granted 设置为 true。 在请求运行时调用 DkmStepper.TakeStepControl 之前,不会提供实际控制。 这两部分过程允许调用方同时请求控制多个步进器。

位置约束:必须从监视组件 (组件级别 < 100,000) 调用 API。

TakeStepControl(Boolean, DkmStepArbitrationReason, DkmRuntimeInstance)

当非控制运行时实例检测到线程已转换到其运行时时,将调用 TakeStepControl。 单步执行管理器会将调用转发到当前控制运行时实例。 请求控制的运行时实例应首先在需要控制的所有步进器上调用 StepControlRequested。 如果它们都设置为“授予”为 true,则运行时实例应在它所控制的每个步进器上调用此方法。

位置约束:必须从监视组件 (组件级别 < 100,000) 调用 API。

显式接口实现

IDisposable.Dispose()

内容待定。

适用于