DkmClrRuntimeInstance 类

定义

表示在目标进程中运行的 CLR 实例。

派生类:DkmClrNcRuntimeInstance

public ref class DkmClrRuntimeInstance : Microsoft::VisualStudio::Debugger::DkmRuntimeInstance
[System.Runtime.InteropServices.Guid("ea234770-c86f-1706-8842-c6fb5311ba79")]
public class DkmClrRuntimeInstance : Microsoft.VisualStudio.Debugger.DkmRuntimeInstance
[<System.Runtime.InteropServices.Guid("ea234770-c86f-1706-8842-c6fb5311ba79")>]
type DkmClrRuntimeInstance = class
    inherit DkmRuntimeInstance
Public Class DkmClrRuntimeInstance
Inherits DkmRuntimeInstance
继承
继承
派生
属性

属性

Capabilities

运行时功能的枚举。

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

(继承自 DkmRuntimeInstance)
Connection

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

(继承自 DkmRuntimeInstance)
CORSystemDirectory

[可选]公共语言运行时的安装目录 (CLR) 实例。 例如“c:\Windows\Microsoft.NET\Framework\v2.0.50727”。 这是从 GetCORSystemDirectory API 返回的相同路径,并且始终包含尾部斜杠。

Id

标识进程中的 DkmRuntimeInstance 对象。

(继承自 DkmRuntimeInstance)
IsUnloaded

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

(继承自 DkmDataContainer)
ParentRuntime

[可选]对于在另一个运行时之上实现的运行时,可以选择将其用于索引逻辑父级。 然后,当子运行时未实现服务时,可以使用它从父级请求服务。 这目前仅用于获取顶层堆栈帧,以便在子运行时不遍取堆栈本身时评估条件断点。

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

(继承自 DkmRuntimeInstance)
Process

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

(继承自 DkmRuntimeInstance)
RuntimeVersion

[可选]CLR 实例的版本字符串 (例如:'v2.0.50727') 。

TagValue

DkmRuntimeInstance 是一个抽象基类。 此枚举指示此对象是哪个派生类的实例。

(继承自 DkmRuntimeInstance)

方法

AfterSteppingArbitration(DkmStepper, DkmStepArbitrationReason, DkmRuntimeInstance)

在单步执行仲裁完成之后,但在下一个运行时实例开始单步执行之前,由旧控制运行时实例上的单步执行管理器调用 AfterSteppingArbitration。 这允许运行时在另一个运行时控制时清除任何单步执行状态。 如果没有其他运行时监视器声明当前位置,则原始监视器应完成此步骤。 NewControllingRuntimeInstance 表示为 null。 例如,如果某个单步进入没有符号且没有其他运行时控制的位置,则运行时实例可能会选择后退。

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

(继承自 DkmRuntimeInstance)
BeforeEnableNewStepper(DkmStepper)

BeforeEnableNewStepper 在启用新的步进器之前由单步执行管理器调用。 这使运行时能够执行可能需要的任何初始化,例如执行前步骤函数评估。

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

(继承自 DkmRuntimeInstance)
BindMethodToObject(DkmStackWalkFrame, UInt64, DkmClrModuleInstance, Int32, DkmClrType, Int32)

尝试将 Token 和 Module 描述的方法绑定到此对象。

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

此 API 是在 Visual Studio 17 Update 8 (DkmApiVersion.VS17Update8) 中引入的。

CanDoFuncEval(DkmThread)

检查给定线程是否处于 CLR 支持托管 func-evals 的状态。

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

ContinueForFuncEval(DkmThread, ICorDebugEval, DkmFuncEvalFlags, UInt32, String)

继续该过程并等待 func-eval 完成。 在创建 ICorDebugEval 并设置评估之前,调用方应始终执行“CanDoFuncEval”。

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

ContinueForFuncEval(DkmThread, ICorDebugEval, DkmFuncEvalFlags, UInt32, String, DkmClrInstructionAddress)

继续该过程并等待 func-eval 完成。 在创建 ICorDebugEval 并设置评估之前,调用方应始终执行“CanDoFuncEval”。

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

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

Create(DkmProcess, DkmRuntimeInstanceId, DkmRuntimeCapabilities, DkmRuntimeInstance, String, String, DkmDataItem)

从调试监视器创建新的运行时实例对象。 当调试监视器检测到新的运行时实例已加载 (例如,当相应的运行时 dll 加载到目标进程) 时,必须从事件线程调用此方法。

此方法将发送 RuntimeInstanceLoad 事件。

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

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

Create(DkmProcess, DkmRuntimeInstanceId, String, String, DkmDataItem)

从调试监视器创建新的运行时实例对象。 当调试监视器检测到新的运行时实例已加载 (例如,当相应的运行时 dll 加载到目标进程) 时,必须从事件线程调用此方法。

此方法将发送 RuntimeInstanceLoad 事件。

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

Disassemble(DkmInstructionAddress, UInt32)

在调试对象运行时中反汇编地址范围。

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

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

(继承自 DkmRuntimeInstance)
FindAppDomain(Int32)

在此 DkmClrRuntimeInstance 中查找 DkmClrAppDomain 元素。 如果不存在具有给定输入键的元素,FindAppDomain 将失败。

FindClrModuleInstance(ICorDebugModule)

从 ICorDebugModule 获取 DkmClrModuleInstance。

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

FindModulesByName(String)

此方法返回与指定名称匹配的所有模块。

(继承自 DkmRuntimeInstance)
GetActiveStatements(DkmActiveStatement[])

提供跨所有线程的所有活动语句的堆栈。 因此,如果同一函数多次出现在调用堆栈上,它将在此数组中重复。 堆栈中的条目按线程分组。

位置约束:可从客户端调用到服务器端。

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

GetActiveStatements(DkmWorkList, DkmCompletionRoutine<DkmGetActiveStatementsAsyncResult>)

提供跨所有线程的所有活动语句的堆栈。 因此,如果同一函数多次出现在调用堆栈上,它将在此数组中重复。 堆栈中的条目按线程分组。

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

位置约束:可从客户端调用到服务器端。

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

GetAliases(DkmInspectionContext)

获取当前可在表达式中使用的别名列表。

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

GetAppDomains()

GetAppDomains 枚举此 DkmClrRuntimeInstance 对象的 DkmClrAppDomain 元素。

GetApplyUpdateCapabilities()

获取运行时支持的编辑并继续编辑集的功能字符串。

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

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

GetApplyUpdateCapabilities(DkmWorkList, DkmCompletionRoutine<DkmGetApplyUpdateCapabilitiesAsyncResult>)

获取运行时支持的编辑并继续编辑集的功能字符串。

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

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

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

GetArrayLayoutForType(DkmManagedTypeId)

给定托管类型 ID,获取该类型的数组布局。

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

GetCodePathsInRange(ICorDebugFrame, UInt32, UInt32)

调用 GetCodePathsInRange 以获取特定 IL 范围内的代码路径。

位置约束:它只应在服务器端调用。

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

(继承自 DkmRuntimeInstance)
GetCorFrame(DkmThread, UInt64, Guid)

GetCorFrame 用于获取组件可用于深入检查堆栈帧的 ICorDebugFrame。

返回的接口只能用于检查目标进程,并且绝不应用于控制执行 (无单步执行、无断点、无继续等) 。 不支持这样做,会导致未定义的行为。

位置约束:必须从目标运行时实现堆栈访问的同一进程调用此 API。 对于托管调试,这意味着在调试 64 位或远程进程时,必须从调试监视器组件调用此 API。

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

GetCorProcess()

提供对 ICorDebugProcess 对象的直接访问,表达式计算器或其他组件可用于检查该对象。

返回的接口只能用于检查目标进程,并且绝不应用于控制执行 (无单步执行、无断点、无继续等) 。 不支持这样做,会导致未定义的行为。

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

GetCorThread(DkmThread)

提供对 ICorDebugThread 对象的直接访问,表达式计算器或其他组件可用于检查应用域。

返回的接口只能用于检查目标进程,并且绝不应用于控制执行 (无单步执行、无断点、无继续等) 。 不支持这样做,会导致未定义的行为。

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

GetDataItem<T>()

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

(继承自 DkmDataContainer)
GetEncAvailability(String)

检查相应的运行时实例是否支持“编辑并继续”。

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

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

GetInstructionAddress(DkmInstructionAddress, Int32)

返回相对于起始地址的 kth 指令的地址。 对于常量长度指令集,这是简单的算术。 对于可变长度指令集,需要反向反汇编才能获取此地址。

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

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

(继承自 DkmRuntimeInstance)
GetIntrinsicAssemblyMetaDataBytesPtr(UInt32)

获取“内部方法程序集”的元数据。 内部方法是调试引擎在执行 CLR 检查查询时理解的特殊方法。 示例:在 C# 表达式计算器中计算“$exception”时,C# 表达式编译器将在内部方法程序集中发出对 GetException 的调用。 调试器将模拟方法调用并返回当前线程上的异常,而不是正常执行调用。

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

GetManagedHeapSamplers()

GetManagedHeapSamplers 枚举此 DkmRuntimeInstance 对象的 DkmManagedHeapSampler 元素。

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

(继承自 DkmRuntimeInstance)
GetManagedHeapWalkers()

GetManagedHeapWalkers 枚举此 DkmRuntimeInstance 对象的 DkmManagedHeapWalker 元素。

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

(继承自 DkmRuntimeInstance)
GetMethodReturnAddresses(DkmClrModuleInstance, DkmClrMethodId)

用于在给定方法中查找所有 ret 指令地址的内部帮助程序方法。 铌! 地址指向实际的 IL,而不是当前/上一个序列点!

位置约束:无。

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

GetModuleInstances()

GetModuleInstances 枚举此 DkmRuntimeInstance 对象的 DkmModuleInstance 元素。

(继承自 DkmRuntimeInstance)
GetOutOfProcStepAddresses(DkmStepper, DkmStackWalkFrame, DkmSteppingRange[])

内部帮助程序方法,用于查找用于单步执行/跳过的候选地址。

位置约束:无。

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

GetScriptDocumentTreeNodes()

GetScriptDocumentTreeNodes 枚举此 DkmRuntimeInstance 对象的 DkmScriptDocumentTreeNode 元素。

(继承自 DkmRuntimeInstance)
GetSymbolNameForAddress(DkmWorkList, UInt64, DkmCompletionRoutine<DkmGetSymbolNameForAddressAsyncResult>)

使用运行时信息而不是符号获取指定地址的符号名称。 目前,这只是针对 CLR 运行时实例实现的。

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

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

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

(继承自 DkmRuntimeInstance)
GetTaskProviders()

GetTaskProviders 枚举此 DkmRuntimeInstance 对象的 DkmTaskProvider 元素。

(继承自 DkmRuntimeInstance)
GetThreadDisplayProperties(DkmWorkList, DkmThread, DkmCompletionRoutine<DkmGetThreadDisplayPropertiesAsyncResult>)

获取线程的显示属性,包括显示名称和线程类别。

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

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

(继承自 DkmRuntimeInstance)
GetThreadName(DkmThread)

计算线程的名称。

(继承自 DkmRuntimeInstance)
GetThreadName(DkmWorkList, DkmThread, DkmCompletionRoutine<DkmGetThreadNameAsyncResult>)

计算线程的名称。

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

(继承自 DkmRuntimeInstance)
GetTypeLayoutForType(DkmManagedTypeId)

给定托管类型 ID,获取该类型的类型布局。

此 API 是在 Visual Studio 17 Update 6 (DkmApiVersion.VS17Update6) 中引入的。

NotifyStepComplete(DkmStepper)

当步骤完成时,单步执行管理器在所有非控制运行时实例上调用 NotifyStepComplete。

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

(继承自 DkmRuntimeInstance)
OnFuncEvalQuickAbortDllLoaded(DkmThread, Boolean)

通知尝试加载 FEQA DLL 的结果。

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

OnLoadComplete()

调试监视器调用此方法以引发 RuntimeInstanceLoadComplete 事件。 RuntimeInstanceLoadComplete 目前仅为本机运行时实例发送,但将来可能会更改。 在为运行时实例中的初始模块集创建 DkmModuleInstance 对象后,将发出 该事件。

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

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

(继承自 DkmRuntimeInstance)
OnNewControllingRuntimeInstance(DkmStepper, DkmStepArbitrationReason, DkmRuntimeInstance)

在步骤仲裁选择了新的控制运行时实例后,步进管理器在所有非控制运行时实例上调用 OnNewControllingRuntimeInstance。

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

(继承自 DkmRuntimeInstance)
OwnsCurrentExecutionLocation(DkmStepper, DkmStepArbitrationReason)

OwnsCurrentExecutionLocation 由单步执行管理器在搜索监视器以执行步骤时调用。 如果调试对象中的当前位置被此监视器理解,它可以在此处返回 true 以控制步骤。

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

(继承自 DkmRuntimeInstance)
PrepareForFuncEvalQuickAbort(DkmThread, Boolean, UInt64)

检查是否应加载 FEQA DLL。

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

ReenableFuncEval(String)

尝试重新启用 func-eval。

此 API 是在 Visual Studio 17 Update 4 (DkmApiVersion.VS17Update4) 中引入的。

RemoveDataItem<T>()

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

(继承自 DkmDataContainer)
ResolveCPUInstructionAddress(DkmWorkList, UInt64, DkmCompletionRoutine<DkmResolveCPUInstructionAddressAsyncResult>)

将 CPU InstructionAddress 解析为特定于运行时的 DkmInstructionAddress 对象。

此 API 当前仅受 CLR DkmRuntimeInstance 对象支持,并且 CLR 运行时实例当前只能查找位于目标进程中某个线程的调用堆栈上的方法中的指令地址。

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

位置约束:通常应在客户端上调用此 API,但可以在服务器上调用它来转换 CLR 地址 (,而不是本机编译) 。

(继承自 DkmRuntimeInstance)
ResolveCPUInstructionAddress(UInt64, Boolean)

将 CPU InstructionAddress 解析为特定于运行时的 DkmInstructionAddress 对象。

此 API 当前仅受 CLR DkmRuntimeInstance 对象支持,CLR 运行时实例目前只能查找位于目标进程中某个线程调用堆栈上的方法中的指令地址。

位置约束:通常应在客户端上调用此 API,但可以在服务器上调用它来转换 CLR 地址 (,而不是本机编译) 。

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

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

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

在线程的上下文中设置寄存器的值。 支持由较大寄存器组成的子寄存器。

(继承自 DkmRuntimeInstance)
Step(DkmStepper, DkmStepArbitrationReason)

步骤由单步执行管理器在确定此监视器为执行步骤的正确监视器后调用。

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

(继承自 DkmRuntimeInstance)
StepControlRequested(DkmStepper, DkmStepArbitrationReason, DkmRuntimeInstance)

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

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

(继承自 DkmRuntimeInstance)
StopStep(DkmStepper)

当进程继续时,单步执行管理器会调用 StopStep,以清除步进器的任何剩余单步执行状态。

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

(继承自 DkmRuntimeInstance)
TakeStepControl(DkmStepper, Boolean, DkmStepArbitrationReason, DkmRuntimeInstance)

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

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

(继承自 DkmRuntimeInstance)
TryDisableFuncEval(String)

尝试禁用 func-eval。

此 API 是在 Visual Studio 17 Update 4 (DkmApiVersion.VS17Update4) 中引入的。

Unload()

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

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

(继承自 DkmRuntimeInstance)

适用于