DkmGPUComputeThread 类

定义

DkmGPUComputeThread 表示在 GPU 目标进程中运行的计算线程。

public ref class DkmGPUComputeThread : Microsoft::VisualStudio::Debugger::DkmThread
[System.Runtime.InteropServices.Guid("40cbb26d-05f5-dc30-49f9-797b17f2ab9e")]
public class DkmGPUComputeThread : Microsoft.VisualStudio.Debugger.DkmThread
[<System.Runtime.InteropServices.Guid("40cbb26d-05f5-dc30-49f9-797b17f2ab9e")>]
type DkmGPUComputeThread = class
    inherit DkmThread
Public Class DkmGPUComputeThread
Inherits DkmThread
继承
继承
DkmGPUComputeThread
属性

属性

ComputeKernel

DkmGPUComputeKernel 表示在目标进程中运行的 GPU 计算内核。

Connection

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

(继承自 DkmThread)
GlobalThreadIndex

唯一的内核计算线程索引。

IsMainThread

如此 如果这是此过程的main线程。 main线程是启动的第一个线程。

(继承自 DkmThread)
IsUnloaded

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

(继承自 DkmDataContainer)
NativeStartAddress

如果可用,这是此线程的 Win32 开始地址 (传递给 CreateThread API) 的值。 值不会始终可用,例如,在连接调试器后启动线程或以最小转接的方式启动线程的情况下,该值通常不可用。

(继承自 DkmThread)
NativeThread

[可选]引发异常以通知调试器 GPU 调试事件可用的本机线程。

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

Process

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

(继承自 DkmThread)
SystemInformation

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

(继承自 DkmThread)
SystemPart

[可选]描述与完整 Win32 线程相关的线程的特征。 目前,此值是必需的,所有线程都将具有“系统”块。 将来,如果 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, UInt64, Boolean, Int64, DkmGPUComputeKernel, DkmThread, DkmThread+System, DkmDataItem)

Create新的 DkmGPUComputeThread 对象实例。

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

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

Create(DkmProcess, UInt64, Boolean, Int64, DkmGPUComputeKernel, DkmThread+System, DkmDataItem)

Create新的 DkmGPUComputeThread 对象实例。

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

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)
GetGroupId(Int32[], Int32)

获取线程块的维度。

GetManagedThreadProperties(DkmWorkList, DkmCompletionRoutine<DkmGetManagedThreadPropertiesAsyncResult>)

获取托管线程的属性。

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

(继承自 DkmThread)
GetManagedThreadProperties(Int32)

获取托管线程的属性。

(继承自 DkmThread)
GetMinidumpThreadInfo(DkmMinidumpThreadInfo)

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

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

(继承自 DkmThread)
GetRegisterDescriptions()

从 GPU 计算线程获取所有寄存器说明的列表。

GetStackAddressRange()

检索给定线程的堆栈限制/堆栈基数。 请注意,此值可能会随时间而更改,例如,在光纤的情况下。

(继承自 DkmThread)
GetSteppers()

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

(继承自 DkmThread)
GetSuspensionCount(Boolean)

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

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

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

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

(继承自 DkmThread)
GetThisGroupDimension(Int32[], Int32)

获取线程块的维度。

GetThisThreadDimension(Int32[], Int32)

获取线程块的维度。

GetThreadCurrentWinRtErrorInfo()

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

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

(继承自 DkmThread)
GetThreadId(Int32[], Int32)

获取线程块的维度。

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)
ReadMemory(UInt64, UInt64, DkmReadMemoryFlags, Byte[])

读取目标 GPU 进程的内存。 方法位于 DkmGPUComputeThread 上,因为它可能会读取线程本地内存、组共享内存或全局内存。

ReadMemory(UInt64, UInt64, DkmReadMemoryFlags, Void*, Int32)

读取目标 GPU 进程的内存。 方法位于 DkmGPUComputeThread 上,因为它可能会读取线程本地内存、组共享内存或全局内存。

RemoveDataItem<T>()

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

(继承自 DkmDataContainer)
Resume(Boolean)

恢复此线程。

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

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

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

在数据容器中放置一个新项。

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

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

(继承自 DkmThread)
SetRegisterValue(DkmGPURegisterDescription, ReadOnlyCollection<Byte>)

在 GPU 计算线程中设置寄存器的值。

SetTlsValue(Int32, UInt64)

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

(继承自 DkmThread)
Suspend(Boolean)

挂起此线程。

(继承自 DkmThread)
Unload(Int32)

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

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

(继承自 DkmThread)
UpdateBufferTag(UInt32)

检查是否已为此内核执行转发缓冲区的标记。

ValidateAddress(UInt64)

验证指定的 GPU 内存地址。

WriteMemory(UInt64, UInt64, Byte[])

将内存写入目标 GPU 进程。 方法位于 DkmGPUComputeThread 上,因为它可能会写入线程本地内存、组共享内存或全局内存。

适用于