DkmVirtualThread 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
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
- 继承
- 继承
- 属性
属性
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) |