DkmInstructionSymbol 类

定义

DkmInstructionSymbol 表示目标进程中的方法。

派生类:DkmClrInstructionSymbol、DkmClrNcInstructionSymbol、DkmCustomInstructionSymbol、DkmNativeInstructionSymbol、DkmScriptInstructionSymbol

public ref class DkmInstructionSymbol abstract
[Windows::Foundation::Metadata::WebHostHidden]
public ref class DkmInstructionSymbol abstract
[Windows::Foundation::Metadata::WebHostHidden]
class DkmInstructionSymbol abstract
[System.Runtime.InteropServices.Guid("c55d7b4d-246f-0e5a-e37e-c9d9f2d996c6")]
public abstract class DkmInstructionSymbol
[<System.Runtime.InteropServices.Guid("c55d7b4d-246f-0e5a-e37e-c9d9f2d996c6")>]
type DkmInstructionSymbol = class
Public MustInherit Class DkmInstructionSymbol
继承
DkmInstructionSymbol
派生
属性

属性

Module

DkmModule 类表示代码捆绑包 (ex: dll 或 exe) ,该代码捆绑包是或一次加载到一个或多个进程中。 DkmModule 类是符号 API 的中心对象,使用符号处理程序的加载内容表示法为 1:1。 如果代码捆绑加载到三个不同的进程 (或相同的进程,但具有三个不同的基址或三个不同的应用域) 但符号处理程序认为所有这些相同,则只有一个模块对象。

RuntimeType

运行时 ID 标识特定代码段的执行环境。 调度程序使用运行时 ID 来决定要调度到哪个监视器。 请注意,运行时 ID Guid 的排序有些重要,因为它决定了哪个运行时在仲裁期间获得第一个快照。 因此,如果想要声明基于 CLR 构建的新运行时实例,运行时 ID 应小于 DkmRuntimeId.Clr。

TagValue

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

方法

Bind(DkmModuleInstance)

将指令符号绑定到特定模块实例。 指令符号连接到 DkmModule 而不是 DkmModuleInstance,因此它不会绑定到特定进程、应用域或模块基址。

GetAlternateSourcePosition(DkmSourcePositionFlags)

返回备用源文件位置 (例如:example.cs,第 12 行) 此指令符号。 这当前在源映射方案中用于返回原始 (未映射) 源位置。 如果找不到主源位置,调试器 UI 将调用此 API。

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

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

GetBasicInfo(DkmWorkList, DkmModuleInstance, DkmBasicSymbolInfoRequestFlags, DkmCompletionRoutine<DkmGetBasicSymbolInfoAsyncResult>)

异步计算给定 DkmInstructionSymbol 的基本符号信息。

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

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

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

GetCompilerId(DkmInspectionSession)

返回给定符号 (LanguageId/VendorId) 编译器 ID。

对于 Microsoft PDB 读取器,如果 PDB 是由使用 ISymUnmanagedWriter 的编译器创建的,则 PDB 读取器将能够从从 ISymUnmanagedWriter.DefineDocument 传递的 LanguageId/VendorId 对中确定正确的 DkmCompilerId。

如果 PDB 是由不使用 ISymUnmanagedWriter 的编译器创建的,则 PDB 读取器可能能够从S_COMPILE* PDB 记录中获取 DkmCompilerId。 为此,编译器必须首先为每个编译单位发出S_COMPILE* 记录。 编译器需要确保正确填写语言枚举值和编译器字符串。 编译器应确保编译器字符串足够具体,可用于选择表达式计算器;建议包含公司名称。 发出 Enum/Name 对后,表达式计算器的设置应向调试器注册此对。 为此,表达式计算器应设置此注册表项:%VSRegistryRoot%\Debugger\CodeView Compilers%CodeViewLanguageCode%:%CompilerName%并定义 VendorId/LanguageId。

GetCompilerId(DkmWorkList, DkmInspectionSession, DkmCompletionRoutine<DkmGetCompilerIdAsyncResult>)

返回给定符号 (LanguageId/VendorId) 编译器 ID。

对于 Microsoft PDB 读取器,如果 PDB 是由使用 ISymUnmanagedWriter 的编译器创建的,则 PDB 读取器将能够从从 ISymUnmanagedWriter.DefineDocument 传递的 LanguageId/VendorId 对中确定正确的 DkmCompilerId。

如果 PDB 是由不使用 ISymUnmanagedWriter 的编译器创建的,则 PDB 读取器可能能够从S_COMPILE* PDB 记录中获取 DkmCompilerId。 为此,编译器必须首先为每个编译单位发出S_COMPILE* 记录。 编译器需要确保正确填写语言枚举值和编译器字符串。 编译器应确保编译器字符串足够具体,可用于选择表达式计算器;建议包含公司名称。 发出 Enum/Name 对后,表达式计算器的设置应向调试器注册此对。 为此,表达式计算器应设置此注册表项:%VSRegistryRoot%\Debugger\CodeView Compilers%CodeViewLanguageCode%:%CompilerName%并定义 VendorId/LanguageId。

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

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

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

GetCurrentStatementRange()

此方法返回包含指令地址中指定的当前 IL 偏移量的 IL 偏移量范围。

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

GetDisassemblyLabel(DkmInspectionSession)

返回应显示在反汇编窗口中的符号的名称。 对于 Microsoft C++ 代码,这基于公共符号名称。

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

GetEmbeddedDocument()

返回包含此符号的嵌入文档。 如果嵌入的文档不存在,则返回S_FALSE。

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

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

GetGPUInstructionMetadataCallback(DkmInstructionAddress, DkmInstructionSymbol)

此方法将地址信息返回到 GPU 调试监视器。

GetInlineFramesCount(DkmBasicSymbolInfoRequestFlags)

返回给定指令符号处的内联帧数。

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

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

GetInlineFramesCount(DkmWorkList, DkmBasicSymbolInfoRequestFlags, DkmCompletionRoutine<DkmGetInlineFramesCountAsyncResult>)

返回给定指令符号处的内联帧数。

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

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

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

GetInlineSourcePosition(DkmStackWalkFrame, Boolean)

返回源文件位置 (例如:example.cs,此指令符号的第 12 行) 位于指定的内联帧编号处。 如果此指令符号与源文件不关联,则本机) 中的返回代码 (S_FALSE 返回 null。

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

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

GetInlineSourcePosition(DkmWorkList, DkmStackWalkFrame, DkmCompletionRoutine<DkmGetInlineSourcePositionAsyncResult>)

返回源文件位置 (例如:example.cs,此指令符号的第 12 行) 位于指定的内联帧编号处。 如果此指令符号与源文件不关联,则本机) 中的返回代码 (S_FALSE 返回 null。

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

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

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

GetNoSourceRanges()

查询符号提供程序以确定指令的范围,这些指令不对应于任何用户源语句,并且由基本调试监视器使用,以在单步执行过程中始终单步执行。

GetSourcePosition(DkmSourcePositionFlags, DkmInspectionSession, Boolean)

返回源文件位置 (例如:example.cs,第 12 行) 此指令符号。 如果此指令符号与源文件不关联,则本机) 中的返回代码 (S_FALSE 返回 null。

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

GetSourcePosition(DkmWorkList, DkmSourcePositionFlags, DkmInspectionSession, DkmCompletionRoutine<DkmGetSourcePositionAsyncResult>)

返回源文件位置 (例如:example.cs,第 12 行) 此指令符号。 如果此指令符号与源文件不关联,则本机) 中的返回代码 (S_FALSE 返回 null。

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

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

GetSourcePositionCallback(DkmSourcePositionFlags, DkmInspectionSession, Boolean)

返回源文件位置 (例如:example.cs,第 12 行) 此指令符号。 如果此指令符号与源文件不关联,则本机) 中的返回代码 (S_FALSE 返回 null。

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

GetSourcePositionCallback(DkmWorkList, DkmSourcePositionFlags, DkmInspectionSession, DkmCompletionRoutine<DkmGetSourcePositionCallbackAsyncResult>)

返回源文件位置 (例如:example.cs,第 12 行) 此指令符号。 如果此指令符号与源文件不关联,则本机) 中的返回代码 (S_FALSE 返回 null。

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

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

GetSteppingRanges(DkmSteppingRangeBoundary, Boolean)

查询符号提供程序,以确定基本调试监视器应逐步执行以执行步骤的指令范围。

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

GetSteppingRanges(DkmWorkList, DkmSteppingRangeBoundary, Boolean, DkmCompletionRoutine<DkmGetSteppingRangesAsyncResult>)

查询符号提供程序,以确定基本调试监视器应逐步执行以执行步骤的指令范围。

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

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

GetUserCodeSourcePositionCallback(DkmInspectionSession)

返回源文件位置 (例如:example.cs,第 12 行) 此指令符号。 如果此指令符号未与源文件关联或不在用户代码中,则返回 null (E_INSTRUCTION_NO_SOURCE 返回代码) 。

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

GetUserCodeSourcePositionCallback(DkmWorkList, DkmInspectionSession, DkmCompletionRoutine<DkmGetUserCodeSourcePositionCallbackAsyncResult>)

返回源文件位置 (例如:example.cs,第 12 行) 此指令符号。 如果此指令符号未与源文件关联或不在用户代码中,则返回 null (E_INSTRUCTION_NO_SOURCE 返回代码) 。

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

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

HasEmbeddedDocument()

测试给定符号是否具有嵌入文档。 嵌入文档是当源文件 (示例:main.cs) 嵌入符号文件 (示例:example.pdb) 。

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

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

HasLineInfo()

查询符号提供程序以确定我们是否有行信息。 由调试监视器用于确定是否可将位置视为用户代码。

位置约束:对于普通符号,可以从任何组件调用。 对于动态符号, 只能在服务器端调用。

HasLineInfo(DkmWorkList, DkmCompletionRoutine<DkmHasLineInfoAsyncResult>)

查询符号提供程序以确定我们是否有行信息。 由调试监视器用于确定是否可将位置视为用户代码。

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

位置约束:对于普通符号,可以从任何组件调用。 对于动态符号, 只能在服务器端调用。

IsHiddenCode(DkmWorkList, DkmInspectionSession, DkmInstructionAddress, DkmCompletionRoutine<DkmIsHiddenCodeAsyncResult>)

如果此指令符号位于隐藏的代码中,则返回 。 例如,在托管代码中,行号0xfeefee将源行标记为隐藏。

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

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

适用于