DkmClrInstructionAddress 类

定义

DkmClrInstructionAddress 用于托管代码中的地址。

派生类:DkmClrNcInstructionAddress

public ref class DkmClrInstructionAddress : Microsoft::VisualStudio::Debugger::DkmInstructionAddress
[Windows::Foundation::Metadata::WebHostHidden]
public ref class DkmClrInstructionAddress : Microsoft::VisualStudio::Debugger::DkmInstructionAddress
[Windows::Foundation::Metadata::WebHostHidden]
class DkmClrInstructionAddress : Microsoft::VisualStudio::Debugger::DkmInstructionAddress
[System.Runtime.InteropServices.Guid("ef7a9773-03a1-0aab-55bb-ee6b870e6246")]
public class DkmClrInstructionAddress : Microsoft.VisualStudio.Debugger.DkmInstructionAddress
[<System.Runtime.InteropServices.Guid("ef7a9773-03a1-0aab-55bb-ee6b870e6246")>]
type DkmClrInstructionAddress = class
    inherit DkmInstructionAddress
Public Class DkmClrInstructionAddress
Inherits DkmInstructionAddress
继承
DkmClrInstructionAddress
派生
属性

属性

CPUInstructionPart

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

(继承自 DkmInstructionAddress)
ILOffset

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

MethodId

此方法的版本/令牌对。

ModuleInstance

包含 InstructionPointer 的模块。

NativeOffset

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

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

Process

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

(继承自 DkmInstructionAddress)
RuntimeInstance

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

TagValue

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

(继承自 DkmInstructionAddress)

方法

CompareTo(DkmInstructionAddress)

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

(继承自 DkmInstructionAddress)
Create(DkmClrRuntimeInstance, DkmClrModuleInstance, DkmClrMethodId, UInt32, UInt32, DkmInstructionAddress+CPUInstruction)

Create新的 DkmClrInstructionAddress 对象实例。

DecodeAsyncStateMachineAttribute()

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

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

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

GetCorFunction()

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

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

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

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)

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

GetNonUserCodeMetadataFlags()

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

GetNonUserCodeMetadataFlags(DkmWorkList, DkmCompletionRoutine<DkmGetNonUserCodeMetadataFlagsAsyncResult>)

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

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

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) 中引入的。

适用于