DkmGPUComputeThread 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
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
- 继承
- 继承
- 属性
属性
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 上,因为它可能会写入线程本地内存、组共享内存或全局内存。 |