DkmClrNcInstructionAddress 类

定义

DkmClrNcInstructionAddress 用于表示本机编译 CLR 代码中的地址。 它包含有关指令使用托管概念 (DkmClrNcModuleInstance、方法令牌、IL 偏移) 和本机概念 ( DkmClrNcContainerModuleInstance、RVA) 的信息。

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

public ref class DkmClrNcInstructionAddress : Microsoft::VisualStudio::Debugger::Clr::DkmClrInstructionAddress
[Windows::Foundation::Metadata::WebHostHidden]
public ref class DkmClrNcInstructionAddress : Microsoft::VisualStudio::Debugger::Clr::DkmClrInstructionAddress
[Windows::Foundation::Metadata::WebHostHidden]
class DkmClrNcInstructionAddress : Microsoft::VisualStudio::Debugger::Clr::DkmClrInstructionAddress
[System.Runtime.InteropServices.Guid("377ece5a-e9ff-bb6a-1612-b5d9cc54755f")]
public class DkmClrNcInstructionAddress : Microsoft.VisualStudio.Debugger.Clr.DkmClrInstructionAddress
[<System.Runtime.InteropServices.Guid("377ece5a-e9ff-bb6a-1612-b5d9cc54755f")>]
type DkmClrNcInstructionAddress = class
    inherit DkmClrInstructionAddress
Public Class DkmClrNcInstructionAddress
Inherits DkmClrInstructionAddress
继承
属性

属性

ContainerModule

基础容器模块 (加载此地址的磁盘模块) 。 (DkmModule) 符号是通过此模块而不是“ModuleInstance”访问的。

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

CPUInstructionPart

[可选]CPUInstructionPart 提供 CPU 将执行的地址。 这始终是为本机指令提供的。 可以根据地址对象的创建方式,为 CLR 或自定义地址提供该地址。

(继承自 DkmInstructionAddress)
GenericParameters

[可选]对于泛型方法,这为每个泛型参数提供 ECMA 格式的 TypeSpec 签名。 对于非泛型方法,此值将为 null。 对于非合并模块,这与映射 (或伪 IL 程序集) 有关。

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

ILOffset

ILOffset 是此地址表示的 IL 指令的索引。 对于给定方法中的指令,此值可以设置为 UInt32.MaxValue,但不绑定到特定 IL 指令。 这用于不映射到 IL 指令的 CLR 本机指令。 (ICorDebugILFrame::GetIP 指示MAPPING_UNMAPPED_ADDRESS) 。

(继承自 DkmClrInstructionAddress)
MethodId

此方法的版本/令牌对。

(继承自 DkmClrInstructionAddress)
ModuleInstance

包含 InstructionPointer 的托管模块。

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

NativeOffset

对于标准.NET Framework,NativeOffset 是相对于可找到 CPU 指令的方法开头的字节偏移量。 对于此值,应将 方法视为连续的字节块。 如果方法尚未进行实时编译,或者此地址用于纯引用 IL 地址,NativeOffset 将设置为 UInt32.MaxValue。

对于本机编译.NET Framework模块,此值是模块中本机指令的 RVA。

(继承自 DkmClrInstructionAddress)
Process

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

(继承自 DkmInstructionAddress)
ReferenceToken

[可选]在多模块程序集中,MethodId.Token 是解析为相应虚拟模块的方法令牌。 可以在伪程序集中查找此标记。

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

RuntimeInstance

表示在目标进程中运行的本机编译 CLR 实例。

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

TagValue

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

(继承自 DkmInstructionAddress)

方法

CompareTo(DkmInstructionAddress)

比较两个指令地址,并返回一个值,该值指示一个地址是小于、等于还是大于另一个。 地址必须来自同一模块。

(继承自 DkmInstructionAddress)
Create(DkmClrMethodId, UInt32, UInt32, DkmClrNcRuntimeInstance, DkmClrNcModuleInstance, DkmClrNcContainerModuleInstance, ReadOnlyCollection<Byte>, Int32, DkmInstructionAddress+CPUInstruction)

Create新的 DkmClrNcInstructionAddress 对象实例。

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

DecodeAsyncStateMachineAttribute()

获取该类型的 MoveNext 方法的 Async State Machine 类型和方法标记。

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

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

(继承自 DkmClrInstructionAddress)
GetCorFunction()

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

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

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

(继承自 DkmClrInstructionAddress)
GetCurrentCPUAddress()

将 DkmInstructionAddress 解析为 CPU InstructionAddress。 这是 ResolveCPUInstructionAddress 的反向映射。 此 API 当前仅受 CLR DkmRuntimeInstance 对象支持。

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

(继承自 DkmInstructionAddress)
GetCurrentCPUAddress(DkmWorkList, DkmCompletionRoutine<DkmGetCurrentCPUAddressAsyncResult>)

将 DkmInstructionAddress 解析为 CPU InstructionAddress。 这是 ResolveCPUInstructionAddress 的反向映射。 此 API 当前仅受 CLR DkmRuntimeInstance 对象支持。

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

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

(继承自 DkmInstructionAddress)
GetNativeCodeMap(DkmStackWalkFrame)

提供如何将此方法编译为本机代码的映射。

(继承自 DkmClrInstructionAddress)
GetNonUserCodeMetadataFlags()

获取此指令地址的非用户代码状态。

(继承自 DkmClrInstructionAddress)
GetNonUserCodeMetadataFlags(DkmWorkList, DkmCompletionRoutine<DkmGetNonUserCodeMetadataFlagsAsyncResult>)

获取此指令地址的非用户代码状态。

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

(继承自 DkmClrInstructionAddress)
GetSymbol()

将 DkmInstructionAddress 转换为 DkmInstructionSymbol。 如果 DkmInstructionAddress 不在 DkmModule 中,则 GetSymbol 将在本机代码) 返回 null (S_FALSE。

(继承自 DkmInstructionAddress)
IsInSameFunction(DkmInstructionAddress)

比较两个指令地址,并确定它们是否在同一函数中。

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

(继承自 DkmInstructionAddress)
IsUserCode(DkmWorkList, DkmCompletionRoutine<DkmIsUserCodeAsyncResult>)

确定给定的指令地址是否为用户代码。

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

位置约束:注意:在 Visual Studio 2017 Update 8 中,API 的 CallDirection 已从“Normal”设为“双向”,现在可以从任何组件调用。

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

(继承自 DkmInstructionAddress)
IsUserCodeWithoutCheckingLineInfo()

由托管 DM 实现并由填充码 EE 使用的帮助程序方法用于确定方法是否是用户代码,而我们正在执行异步返回堆栈。 我们不希望使用常规 IsUserCode () 方法,因为该方法会往返符号提供程序以查看是否有行信息。 为了避免这种情况,我们使用此方法让托管 DM 执行其他检查。 然后,当填充码 EE 返回到符号提供程序时,符号提供程序将检查行信息。 这样一来,就可以在远程端的一次往返中计算整个托管返回堆栈,而无需仅仅为了确定返回堆栈帧是否是用户代码而进行额外的来回聊天。

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

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

(继承自 DkmClrInstructionAddress)

适用于