DkmStackWalkFrame 类

定义

DkmStackWalkFrame 表示调用堆栈上已遍历但可能尚未格式化或筛选的帧。 格式化的帧改为由 DkmStackFrame 表示。

派生类:DkmStackFrame

public ref class DkmStackWalkFrame
[Windows::Foundation::Metadata::WebHostHidden]
public ref class DkmStackWalkFrame
[Windows::Foundation::Metadata::WebHostHidden]
class DkmStackWalkFrame
[System.Runtime.InteropServices.Guid("48b55030-ecac-2387-4e63-bfdc3c172598")]
public class DkmStackWalkFrame
[<System.Runtime.InteropServices.Guid("48b55030-ecac-2387-4e63-bfdc3c172598")>]
type DkmStackWalkFrame = class
Public Class DkmStackWalkFrame
继承
DkmStackWalkFrame
派生
属性

属性

AnnotatedModule

[可选]如果有批注帧,则指定要与此帧关联的可选模块实例。 如果存在,用户可以通过右键单击调用堆栈窗口中的此帧来加载此模块的二进制文件或符号。 对于未带批注的帧,这是 NULL。

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

Annotations

[可选]堆栈帧批注的只读集合。 这些由展开器定义,特定于该展开器。 一个示例用法是如何将内联帧数据从内联堆栈筛选器传递到格式化程序。

AsyncContext

[可选]用于遍走异步返回堆栈和任务创建堆栈的可选上下文。

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

BasicSymbolInfo

[可选]包含与帧的 InstructionAddress 相对应的 DkmInstructionSymbol 的基本信息。 对于本机帧,在将帧传递到堆栈筛选器之前,由 StackProvider 计算。

对于 DkmStackFrame,这始终为 null。

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

Connection

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

Data

[可选]要附加到 DkmStackWalkFrame 的可选对象,允许组件将其他私有数据与帧相关联。

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

Description

[可选]将在调用堆栈窗口中显示的帧的说明。 这应该为带批注的帧提供。

Flags

标记 DkmStackWalkFrame 的属性。

FrameBase

框架的基堆栈指针。 SDM 使用它对帧进行排序,堆栈合并使用它来评估步进进度,因此即使批注帧也需要此值。 此值应仅在调试对象的堆栈损坏的情况下无效。

FrameSize

此帧使用的堆栈的字节数。 对于批注帧,此值将为零;如果该值未知,则此值为零。

InstructionAddress

[可选]此帧的指令。 对于批注帧,可以省略此值。

ModuleInstance

[可选]包含此地址的模块。 即使对于) 自定义地址,没有模块的地址也不能具有符号 (。 CLR 地址将始终具有模块。 如果 CPU 跳转到无效地址 (例如 NULL) ,或者 CPU 正在执行动态发出的代码,则本机地址将没有模块。

Priority

堆栈演练帧的优先级。 这通常用于检测到问题的批注帧。

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

Process

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

Registers

[可选]所走帧的寄存器。 应为未带批注的帧提供这些。

RuntimeInstance

[可选]DkmRuntimeInstance 类表示加载到 DkmProcess 中的执行环境,其中包含要调试的代码。

Thread

此堆栈帧位于的线程。

UniqueId

DkmStackWalkFrame 的唯一标识符。 在远程调试方案中,如果帧是从较旧的 IDE/远程调试器封送的,则可能GUID_NULL/Guid.Empty。

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

方法

CanSetNextStatement(DkmInstructionAddress)

CanSetNextStatement 确定是否可以移动堆栈帧的 IP。 堆栈帧始终是特定线程上的叶堆栈帧。 此 API 只能在引擎进程中实现。 应S_OK Result out 参数或 UI 可以映射到错误消息的失败 HRESULT 的值。

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

ComputeUserStatus(DkmInspectionSession, Boolean)

确定框架是否为用户代码。

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

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

Create(DkmThread, DkmInstructionAddress, UInt64, UInt32, DkmStackWalkFrameFlags, String, DkmFrameRegisters, ReadOnlyCollection<DkmStackWalkFrameAnnotation>)

Create新的 DkmStackWalkFrame 对象实例。

Create(DkmThread, DkmInstructionAddress, UInt64, UInt32, DkmStackWalkFrameFlags, String, DkmFrameRegisters, ReadOnlyCollection<DkmStackWalkFrameAnnotation>, DkmModuleInstance, DkmAsyncStackWalkContext, DkmStackWalkFrameData)

Create新的 DkmStackWalkFrame 对象实例。

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

Create(DkmThread, DkmInstructionAddress, UInt64, UInt32, DkmStackWalkFrameFlags, String, DkmFrameRegisters, ReadOnlyCollection<DkmStackWalkFrameAnnotation>, DkmModuleInstance, DkmAsyncStackWalkContext, DkmStackWalkFrameData, DkmBasicInstructionSymbolInfo)

Create新的 DkmStackWalkFrame 对象实例。

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

Create(DkmThread, DkmInstructionAddress, UInt64, UInt32, DkmStackWalkFrameFlags, String, DkmFrameRegisters, ReadOnlyCollection<DkmStackWalkFrameAnnotation>, DkmModuleInstance, DkmAsyncStackWalkContext, DkmStackWalkFrameData, DkmBasicInstructionSymbolInfo, DkmStackWalkFramePriority)

Create新的 DkmStackWalkFrame 对象实例。

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

Format(DkmInspectionSession, DkmFrameFormatOptions)

将 DkmStackWalkFrame 格式化为 DkmStackFrame。 设置框架格式是堆栈提供程序在 GetNextFrames 期间执行的操作的一个步骤。 此方法可用于以不同于 GetNextFrames 中的堆栈提供程序最初执行的方式设置帧的格式。

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

GetClrGenericParameters()

获取当前堆栈帧的泛型参数,作为程序集限定名称的列表。

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

GetClrGenericParameters(DkmWorkList, DkmCompletionRoutine<DkmGetClrGenericParametersAsyncResult>)

获取当前堆栈帧的泛型参数,作为程序集限定名称的列表。

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

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

GetInspectionInterface(DkmInspectionSession, Guid)

GetInspectionInterface 用于获取 ICorDebugFrame 或其他特定于实现的接口,组件可以使用这些接口来深入检查堆栈帧。

返回的接口只能用于检查目标进程,并且绝不应用于控制执行 (无单步执行、无断点、无继续等) 。 不支持这样做,会导致未定义的行为。 注意:出于性能原因,不建议从托管代码使用此方法。 在本机代码和托管代码之间封送 DkmStackWalkFrame 的成本很高。 请改用 DkmRuntimeInstance.GetFrameInspectionInterface。

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

GetInstructionSymbol()

返回堆栈帧的 DkmInstructionSymbol。 如果堆栈帧 (批注帧) 没有指令地址,或者指令地址没有关联的 DkmModule,则 GetInstructionSymbol 将在本机代码) 中返回 null (S_FALSE。

GetProperty(ICorDebugValue, String)

计算给定 ICorDebugValue 上的属性。 值的类型必须由调用此 $Name$ 的 DkmStackWalkFrame 的 DkmClrAppDomain 加载。

位置约束:这必须位于远程端,因为我们要传递 ICorDebugHandleValue。

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

GetUnwindAddress(DkmInstructionAddress)

返回一个地址,该地址表示在此帧中截获异常时的位置。

InterceptCurrentException(DkmExceptionInterceptActionFlags, UInt64)

InterceptCurrentException 用于展开到此帧,就像该帧中存在异常处理程序一样。

OnSetNextStatementCompleted(DkmInstructionAddress)

OnSetNextStatementCompleted 是一种常规用途方法,允许组件在设置下一个语句完成后清除状态。 DkmStackWalkFrame 将是 SetNextStatement 调用之前的帧。

位置约束:通常只能从客户端组件调用此 API。 但是,如果从事件处理程序调用 set next 语句,则监视端组件可以安全地调用此 API。

SetNextStatement(DkmInstructionAddress)

SetNextStatement 移动堆栈帧的 IP。 堆栈帧始终是特定线程上的叶堆栈帧。

适用于