DkmVirtualThread 类

定义

DkmVirtualThread 表示在调试进程中物理上不存在的线程。

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

public ref class DkmVirtualThread : Microsoft::VisualStudio::Debugger::DkmThread
[System.Runtime.InteropServices.Guid("bec7987a-48f1-dd04-3001-8c296365a14f")]
public class DkmVirtualThread : Microsoft.VisualStudio.Debugger.DkmThread
[<System.Runtime.InteropServices.Guid("bec7987a-48f1-dd04-3001-8c296365a14f")>]
type DkmVirtualThread = class
    inherit DkmThread
Public Class DkmVirtualThread
Inherits DkmThread
继承
继承
DkmVirtualThread
属性

属性

Connection

这表示监视器与 IDE 之间的连接。 如果监视器与 IDE 在同一进程中运行,则它可以是本地连接,也可以是远程连接。 在监视过程中,只有一个连接。

(继承自 DkmThread)
IsMainThread

如果这是此进程的main线程,则为 True。 main线程是启动的第一个线程。

(继承自 DkmThread)
IsUnloaded

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

(继承自 DkmDataContainer)
NativeStartAddress

如果可用,这是此线程的 Win32 开始地址 (传递给 CreateThread API) 的值。 值不会始终可用,例如,在附加调试器后启动线程或在小型转接中,该值通常不可用。

(继承自 DkmThread)
Process

DkmProcess 表示正在调试的目标进程。 调试器调试进程,因此这是调试的基本单元。 DkmProcess 可以表示系统进程或虚拟进程,例如小型转用。

(继承自 DkmThread)
SystemInformation

包含有关运行此线程的计算机系统的信息。 如果此线程在 WOW (64 位操作系统上的 32 位仿真下运行,) 此信息将针对 32 位子系统而不是 64 位子系统。

(继承自 DkmThread)
SystemPart

[可选]描述与完整 Win32 线程相关的线程的特征。 目前,此值是必需的,并且所有线程都将具有“System”块。 将来,如果 DkmThread 表示非完整 Win32 线程,则此值可能为 NULL。

(继承自 DkmThread)
TebAddress

目标进程中的地址,其中存储了 Win32 线程环境块。 有关详细信息,请参阅 MSDN 中有关 TEB 结构的文档。

(继承自 DkmThread)
UniqueId

唯一标识此线程对象的 Guid。

(继承自 DkmThread)

方法

BeginFuncEvalExecution(DkmFuncEvalFlags)

此方法用于恢复目标进程,以便进行函数计算。 运行时调试监视器在设置函数评估后调用此函数,以使目标进程运行。 运行时监视器将首先更新线程上下文,更新目标进程中的任何必要内存,并设置函数评估已完成的任何检测。

此方法的调用方在从触发函数计算的操作返回之前,必须始终调用 EndFuncEvalExecution。 如果调用方未能这样做,则行为是未定义的。

此方法在基本调试监视器中实现,方法是先将目标进程更新为处于函数评估模式 (DkmThread.OnBeginFuncEvalExecution) ,然后挂起和/或恢复函数评估标志指定的线程,最后继续目标进程。

此方法可以从任何线程调用,但必须从停止事件线程调用 OnBeginFuncEvalExecution,因此在此方法实现过程中,基本调试监视器可能需要作为线程开关执行。 在目标恢复之前,基本调试监视器不应从 BeginFuncEvalExecution 返回。

(继承自 DkmThread)
CanBeginFuncEvalExecution(DkmFuncEvalFlags)

可以调用 CanBeginFuncEvalExecution 来了解进程的当前状态是否允许函数计算。 这将返回 false,例如,如果基本 DM 已调用 StoppingEventProcessingBegin,但不返回 StoppingEventProcessingContinue。

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

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

(继承自 DkmThread)
Create(DkmProcess, DkmThread+System, DkmDataItem)

Create新的 DkmVirtualThread 对象实例。

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

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

CreateFrameRegisters(DkmUnwoundRegister[], UInt32)

将 DkmUnwoundRegisters 数组转换为包含 DkmUnwoundRegisters 的排序 DkmReadOnlyCollection 的 DkmFrameRegisters 实例。

(继承自 DkmThread)
CreateRegistersObject(Byte[], DkmUnwoundRegister[], DkmUnwoundRegister[])

从提供的包含 Win32 CONTEXT 结构的字节数组创建 DkmFrameRegisters 对象。

(继承自 DkmThread)
EndFuncEvalExecution(DkmFuncEvalFlags)

事件线程上的运行时调试监视器调用 EndFuncEvalExecution 以退出函数评估模式。 EndFuncEvalExecution 将更新 DkmProcess 对象的内部状态,以指示函数评估已结束。 这还将发送 FuncEvalEnded 事件,并将进程标记为已停止。

在处理“已接收”停止事件通知时, (1) 调用此方法-或- (2) 处理线程退出等非停止事件时, (3) 目标仍停止,例如,如果函数评估设置失败。

(继承自 DkmThread)
GetContext(Int32, Byte[])

获取当前上下文 (注册线程) 值。

(继承自 DkmThread)
GetContext(Int32, Void*, Int32)

获取当前上下文 (注册线程) 值。

(继承自 DkmThread)
GetCurrentFrameInfo(UInt64, UInt64, UInt64)

GetCurrentFrameInfo 用于获取线程当前上下文的帧基和返回地址。 这考虑了帧指针省略以及当前指令指针是否在 prolog、epilog 等中...注意:在某些情况下,如果帧具有帧指针遗漏且未加载符号,则会出现错误。

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

(继承自 DkmThread)
GetCurrentFuncEvalMode()

组件可以在事件处理过程中调用 GetCurrentFuncEvalMode,以确定是否启用了函数评估。 此函数只能在事件处理过程中调用。

(继承自 DkmThread)
GetCurrentLocation(DkmWorkList, DkmCompletionRoutine<DkmGetCurrentLocationAsyncResult>)

提供线程的位置(如在线程窗口中可见)或调试位置工具栏中的线程下拉列表。

此方法会将新工作项追加到指定的工作列表,并在追加工作项后返回 。 工作项的实际处理是异步的。 将通过完成例程通知调用方请求已完成。

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

(继承自 DkmThread)
GetCurrentRegisters(DkmUnwoundRegister[])

返回包含线程的当前寄存器值的 DkmFrameRegisters 对象。

(继承自 DkmThread)
GetDataItem<T>()

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

(继承自 DkmDataContainer)
GetDebuggerSuspensionCount()

返回由调试器 (即调用 DkmThread::Suspend 而不调用 DkmThread::Resume) 导致的挂起总数。 这不包括调试器外部的任何挂起。

(继承自 DkmThread)
GetExtendedRegisters()

从线程上下文中获取扩展寄存器。

(继承自 DkmThread)
GetManagedThreadProperties(DkmWorkList, DkmCompletionRoutine<DkmGetManagedThreadPropertiesAsyncResult>)

获取托管线程的属性。

此方法会将新工作项追加到指定的工作列表,并在追加工作项后返回 。 工作项的实际处理是异步的。 将通过完成例程通知调用方请求已完成。

(继承自 DkmThread)
GetManagedThreadProperties(Int32)

获取托管线程的属性。

(继承自 DkmThread)
GetMinidumpThreadInfo(DkmMinidumpThreadInfo)

获取存储在微型转储中的线程状态信息。

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

(继承自 DkmThread)
GetStackAddressRange()

检索给定线程的堆栈限制/堆栈基数。 请注意,此值可能会随时间而变化,例如,对于纤维。

(继承自 DkmThread)
GetSteppers()

GetSteppers 枚举此 DkmThread 对象的 DkmStepper 元素。

(继承自 DkmThread)
GetSuspensionCount(Boolean)

返回此线程的当前挂起计数。

(继承自 DkmThread)
GetSuspensionCount(DkmWorkList, Boolean, DkmCompletionRoutine<DkmGetSuspensionCountAsyncResult>)

返回此线程的当前挂起计数。

此方法会将新工作项追加到指定的工作列表,并在追加工作项后返回 。 工作项的实际处理是异步的。 将通过完成例程通知调用方请求已完成。

(继承自 DkmThread)
GetThreadCurrentWinRtErrorInfo()

GetThreadCurrentWinRtErrorInfo 用于获取此线程的当前 IErrorInfo 对象的地址。

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

(继承自 DkmThread)
GetTlsValue(Int32)

检索调试会话线程的线程本地存储中的值, (指定 TLS 索引的 TLS) 槽。 进程中的每个线程都具有自己的针对每个 TLS 索引的槽。

(继承自 DkmThread)
GetTopStackFrame()

返回线程的顶部调用堆栈帧。 此值通常在第一个堆栈遍历后缓存,并在继续时清除。 这只能在客户端进程中的堆栈提供程序上调用。 若要在服务器进程中获取顶部帧,请调用 GetTopStackWalkFrame。

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

(继承自 DkmThread)
GetTopStackWalkFrame(DkmRuntimeInstance)

返回线程的上堆栈帧。 此帧可以来自运行时实例或监视器展开器。 这只能从服务器进程调用。 若要在客户端进程中获取顶部帧,请使用 GetTopStackFrame。

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

(继承自 DkmThread)
GetVolatileFlags()

获取有关线程的易失性标志。 例如,如果线程是用户模式计划线程,则返回 。

(继承自 DkmThread)
GetVolatileFlags(DkmWorkList, DkmCompletionRoutine<DkmGetVolatileFlagsAsyncResult>)

获取有关线程的易失性标志。 例如,如果线程是用户模式计划线程,则返回 。

此方法会将新工作项追加到指定的工作列表,并在追加工作项后返回 。 工作项的实际处理是异步的。 将通过完成例程通知调用方请求已完成。

(继承自 DkmThread)
GetVolatileProperties(DkmWorkList, DkmCompletionRoutine<DkmGetVolatilePropertiesAsyncResult>)

获取线程的动态属性。

此方法会将新工作项追加到指定工作列表,并在追加工作项后返回。 工作项的实际处理是异步的。 将通过完成例程通知调用方请求已完成。

(继承自 DkmThread)
GetVolatileProperties(Int32, UInt64)

获取线程的动态属性。

(继承自 DkmThread)
IsStoppingEventQueued(Boolean)

指示给定线程是否在队列中具有停止事件。 执行管理器使用此信息来确定是否可能会滑落线程。

(继承自 DkmThread)
OnBeginFuncEvalExecution(DkmFuncEvalFlags)

OnBeginFuncEvalExecution 由事件线程上的基本调试监视器调用。 此方法作为 IDkmBaseFuncEvalService.BeginFuncEvalExecution 实现的一部分调用,该调用是为了恢复函数评估的过程。 OnBeginFuncEvalExecution 将更新 DkmProcess 对象的内部状态,以指示函数评估正在进行中。 这还将发送 FuncEvalStarting 事件,并将进程标记为正在运行,以便不允许任何需要停止进程的操作。

(继承自 DkmThread)
OnContinueExecution()

OnContinueExecution 由事件线程上的基本调试监视器调用。 此方法作为 IDkmContinueExecution.ContinueExecution 实现的一部分调用,IDE 使用该方法继续执行目标进程。 调度程序使用此方法来调度之前无法处理的停止事件,或更新 DkmProcess 对象的内部状态,以指示目标进程现在正在运行。 在将进程标记为正在运行之前,调度程序将发送 Continue 事件。

当基本调试监视器位于此方法中时,它应该被重新调用。

(继承自 DkmThread)
OnEmbeddedBreakpointHit(DkmInstructionAddress, Boolean)

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

(继承自 DkmThread)
OnInterceptExceptionCompleted(UInt64)

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

(继承自 DkmThread)
OnThreadNameChange()

当监视器调用 DkmThread::NameChange 时,调度程序发送 ThreadNameChange。

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

(继承自 DkmThread)
RaiseExecutionControlException(UInt32)

可从 IDkmSingleStepCompleteReceived 或 IDkmRuntimeBreakpointReceived 实现调用的 API,以强制基本 DM 在恢复执行时在目标进程中触发EXCEPTION_BREAKPOINT或EXCEPTION_SINGLE_STEP异常。 通常,断点或单步异常是隐式取消的。 这允许目标进程中的异常处理程序处理EXCEPTION_BREAKPOINT/EXCEPTION_SINGLE_STEP。 如果线程当前未处于步骤完成或断点事件,则此 API 将失败。

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

(继承自 DkmThread)
RemoveDataItem<T>()

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

(继承自 DkmDataContainer)
Resume(Boolean)

继续此线程。

(继承自 DkmThread)
SetContext(Byte[])

更新上下文 (注册线程) 的值。

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

将新项放在数据容器中。

(继承自 DkmDataContainer)
SetExtendedRegisterValue(Int32, ReadOnlyCollection<Byte>)

设置线程上下文中扩展寄存器的值。

(继承自 DkmThread)
SetTlsValue(Int32, UInt64)

将值存储在调试对象线程的线程本地存储 (指定 TLS 索引的 TLS) 槽中。 进程中的每个线程都具有自己的针对每个 TLS 索引的槽。

(继承自 DkmThread)
Suspend(Boolean)

挂起此线程。

(继承自 DkmThread)
Unload(Int32)

当监视器调用 DkmThread::Unload 时,调度程序发送 ThreadExit。

此方法只能由创建对象的组件调用。

(继承自 DkmThread)

适用于