Share via


DkmModule 类

定义

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

public ref class DkmModule : Microsoft::VisualStudio::Debugger::DkmDataContainer
[System.Runtime.InteropServices.Guid("9fdf7d9f-e5ab-b363-6282-1da170173343")]
public class DkmModule : Microsoft.VisualStudio.Debugger.DkmDataContainer
[<System.Runtime.InteropServices.Guid("9fdf7d9f-e5ab-b363-6282-1da170173343")>]
type DkmModule = class
    inherit DkmDataContainer
Public Class DkmModule
Inherits DkmDataContainer
继承
继承
属性

属性

CompilerId

生成此模块中所有代码的编译器的 LanguageId/VendorId。 如果模块可能包含混合语言,则为 Guid.Empty/Guid.Empty。 对于基于 PDB 的模块,这几乎始终是 Guid.Empty/Guid.Empty。 动态语言通常用于避免网络往返来发现每个符号的语言。

Connection

[可选]对于远程加载符号的模块,连接属性用于确定连接的来源。 否则,此值将为 NULL。

FilePath

[可选]如果指定,则包含符号文件的完整路径,该符号文件后备 DkmModule (例如:c:\myproj\bin\Debug\myproj.pdb) 。

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

Flags

指示此 DkmModule 对象的特征的标志。

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

Id

用于唯一标识特定 DkmModule 实例的 Guid 对。

IsUnloaded

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

(继承自 DkmDataContainer)
Name

模块的名称。

SymbolsConnection

[可选]如果为非 null,则指定与处理此 DkmModule 符号的工作进程的连接。 如果在 IDE 进程中加载符号,或者在远程调试器中加载符号 (DkmModule.Connection) 为非 null,则该值为 null。

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

方法

Create(DkmModuleId, String, DkmCompilerId, DkmTransportConnection, DkmDataItem)

创建一个新的 DkmModule 对象,该对象表示一个或多个加载的模块 (模块实例) 的符号。 这些对象由符号提供程序创建。 创建 DkmModule 对象后,符号提供程序应调用 DkmModuleInstance.SetModule 以将 DkmModuleInstance 和 DkmModule 关联在一起。

此方法将发送 ModuleCreate 事件。

Create(DkmModuleId, String, DkmCompilerId, DkmTransportConnection, DkmWorkerProcessConnection, String, DkmDataItem)

创建一个新的 DkmModule 对象,该对象表示一个或多个加载的模块 (模块实例) 的符号。 这些对象由符号提供程序创建。 创建 DkmModule 对象后,符号提供程序应调用 DkmModuleInstance.SetModule 以将 DkmModuleInstance 和 DkmModule 关联在一起。

此方法将发送 ModuleCreate 事件。

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

Create(DkmModuleId, String, DkmCompilerId, DkmTransportConnection, DkmWorkerProcessConnection, String, DkmModuleSymbolFlags, DkmDataItem)

创建一个新的 DkmModule 对象,该对象表示一个或多个加载的模块 (模块实例) 的符号。 这些对象由符号提供程序创建。 创建 DkmModule 对象后,符号提供程序应调用 DkmModuleInstance.SetModule 以将 DkmModuleInstance 和 DkmModule 关联在一起。

此方法将发送 ModuleCreate 事件。

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

EnumSymbolsDocuments()

枚举与模块关联的符号文件的符号文档。

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

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

EnumSymbolsDocuments(DkmWorkList, DkmCompletionRoutine<DkmEnumSymbolsDocumentsAsyncResult>)

枚举与模块关联的符号文件的符号文档。

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

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

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

FindDocuments(DkmSourceFileId)

从文档查询中包含的搜索参数返回文档对象。 如果符号文件不包含对此文档的引用,则返回的文档对象将为 NULL, (S_FALSE 本机) 中的返回代码。 当调用方完成文档操作时,调用方必须显式关闭返回的文档对象。

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

FindDocuments(DkmWorkList, DkmSourceFileId, DkmCompletionRoutine<DkmFindDocumentsAsyncResult>)

从文档查询中包含的搜索参数返回文档对象。 如果符号文件不包含对此文档的引用,则返回的文档对象将为 NULL, (S_FALSE 本机) 中的返回代码。 当调用方完成文档操作时,调用方必须显式关闭返回的文档对象。

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

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

FindModule(DkmModuleId)

查找 DkmModule 对象。 如果不存在具有给定输入键的对象,FindModule 将失败。

GetAcceleratorTagTableSize(UInt32)

获取寄存器的C++ AMP地址。

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

GetCompilerOptions()

此方法返回给定 GPU 模块的编译器标志。

GetDataItem<T>()

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

(继承自 DkmDataContainer)
GetEntryPointSymbols()

断点管理器使用 GetEntryPointSymbols 在启动的可执行文件中查找入口点符号 (s) 。 对于托管代码,此符号是使用 ISymUnmanagedWriter::SetUserEntryPoint 定义的。 对于本机代码,可以通过查找各种“main”函数 (main、WinMain 等) 来找到此符号。 第三个可以通过实现自己的符号提供程序或实现 IDkmEntryPointQuery 来替代入口点。

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

GetExpensiveHashValue(DkmSourceFileId, DkmHashAlgorithmId)

从提供的 DkmSourceFileId 检索“昂贵”哈希值。

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

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

GetFirstMethodInFirstDocument()

返回第一个文档中的第一个方法。

GetFunctionInfo(DkmWorkList, String, DkmCompletionRoutine<DkmGetFunctionInfoAsyncResult>)

搜索具有指定名称的函数的模块符号。 如果找到 RVA,则返回 RVA 和大小。

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

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

GetFunctionInfo(String)

搜索具有指定名称的函数的模块符号。 如果找到 RVA,则返回 RVA 和大小。

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

GetFunctionLabels(UInt64)

获取 RVA 的符号名称。

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

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

GetFunctionRva(UInt64)

获取包含指定 RVA 的函数的 RVA。

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

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

GetInstructionOffsetForRva(UInt32)

组件使用 GetInstructionOffsetForRva 来查询符号提供程序,以执行 DPC++ 的指令偏移和 RVA 转换。

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

GetLinkerFixupRecords()

获取模块的链接器修复记录。

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

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

GetMethodSymbolStoreData(DkmClrMethodId)

返回方法中的范围。 始终至少有一个范围。

GetMethodSymbolStoreData(DkmWorkList, DkmClrMethodId, DkmCompletionRoutine<DkmGetMethodSymbolStoreDataAsyncResult>)

返回方法中的范围。 始终至少有一个范围。

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

GetMethodSymbolStoreDataPreRemap(DkmClrMethodId, Int32)

返回方法中的范围。 始终至少有一个范围。

GetMethodSymbolStoreDataPreRemap(DkmWorkList, DkmClrMethodId, DkmCompletionRoutine<DkmGetMethodSymbolStoreDataPreRemapAsyncResult>)

返回方法中的范围。 始终至少有一个范围。

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

GetModuleInstances()

DkmModule 是模块的符号处理程序表示形式,不绑定到任何进程、连接或运行时实例。 此方法返回映射到此 DkmModule 的所有 DkmModuleInstances。 如果现在卸载了所有模块,则 DkmModule 可以绑定到零个实例。 在这种情况下,GetModuleInstances 将返回一个空数组, (S_FALSE 本机) 返回代码。

GetModules()

GetModules 枚举所有创建的 DkmModule 对象。

GetPointerToHLSLRegister(Int32, UInt32, UInt32, UInt32, UInt32, UInt32, UInt32, UInt32, UInt32, Boolean)

获取寄存器的C++ AMP地址。

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

GetPublicSymbolByNameCallback(DkmWorkList, String, DkmCompletionRoutine<DkmGetPublicSymbolByNameCallbackAsyncResult>)

按字符串返回特定名称S_PUBLIC32的 RVA。

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

GetPublicSymbolByNameCallback(String)

按字符串返回特定名称S_PUBLIC32的 RVA。

GetRegisterRelativeSymbolName(DkmWorkList, UInt32, Int32, UInt32, DkmProcessorArchitecture, DkmCompletionRoutine<DkmGetRegisterRelativeSymbolNameAsyncResult>)

获取寄存器相对值的符号名称。

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

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

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

GetRegisterRelativeSymbolName(UInt32, Int32, UInt32, DkmProcessorArchitecture)

获取寄存器相对值的符号名称。

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

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

GetScriptDocuments()

GetScriptDocuments 枚举此 DkmModule 对象的 DkmScriptDocument 元素。

GetSourceLinkData(DkmModuleInstance)

如果流存在,则返回模块的源链接流数据的内容。

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

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

GetSourceLinkData(DkmWorkList, DkmModuleInstance, DkmCompletionRoutine<DkmGetSourceLinkDataAsyncResult>)

如果流存在,则返回模块的源链接流数据的内容。

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

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

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

GetSourceLinkInfo(String)

从所请求文件路径的符号文件中返回 SourceLink 信息。

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

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

GetSourceServerData(DkmModuleInstance)

如果流存在,则返回模块的源服务器流数据的内容。

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

GetSourceServerData(DkmWorkList, DkmModuleInstance, DkmCompletionRoutine<DkmGetSourceServerDataAsyncResult>)

如果流存在,则返回模块的源服务器流数据的内容。

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

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

GetSymbolFilePath()

返回用于备份 DkmModule 对象的符号文件的路径。

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

GetSymbolFilePath(DkmWorkList, DkmCompletionRoutine<DkmGetSymbolFilePathAsyncResult>)

返回用于备份 DkmModule 对象的符号文件的路径。

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

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

GetSymbolFileRawBytes()

GetSymbolFileRawBytes 用于从远程端检索符号文件的原始字节。 目前仅动态可移植 PDB 支持此功能。 这将返回最多 10 MB。

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

此 API 是在 Visual Studio 14 Update 3 Micro Update (DkmApiVersion.VS14Update3MicroUpdate) 中引入的。

GetSymbolInterface(Guid)

GetSymbolInterface 用于获取符号存储的原始 COM 接口。 对于发现调试器提供的符号抽象过于严格,或者由于组件的实现方式而根本不需要的调用方,这非常有用。

位置约束:除托管符号外,必须从符号提供程序打开符号文件的同一进程中调用此方法。 对于本机 PDB 文件,这意味着必须从 IDE 进程调用 API。 对于托管符号,在远程连接的两端提供符号提供程序 API 的子集。

GetSymbolNameForRVA(DkmWorkList, UInt32, DkmCompletionRoutine<DkmGetSymbolNameForRVAAsyncResult>)

获取 RVA 的符号名称。

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

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

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

GetSymbolNameForRVA(UInt32, UInt64)

获取 RVA 的符号名称。

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

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

GetTokenSymbolStoreAttribute(DkmWorkList, Int32, Boolean, String, DkmCompletionRoutine<DkmGetTokenSymbolStoreAttributeAsyncResult>)

根据名称获取自定义属性。 不要与元数据自定义属性混淆,这些属性保存在符号存储中。

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

GetTokenSymbolStoreAttribute(Int32, Boolean, String)

根据名称获取自定义属性。 不要与元数据自定义属性混淆,这些属性保存在符号存储中。

IsValidAcceleratorTag(UInt32, UInt32)

验证加速器指针标记是否有效。

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

OnModuleSymbolsReplaced()

引发 ModuleSymbolsReplaced 事件。 实现事件接收器接口的组件将收到事件通知。 一旦通知所有组件,控件将返回。

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

RemoveDataItem<T>()

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

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

将新项放在数据容器中。

(继承自 DkmDataContainer)
SetPointerToHLSLRegister(UInt64, Int32, UInt32, UInt32, UInt32, UInt32, UInt32, UInt32, UInt32)

设置寄存器的C++ AMP地址。

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

SymbolsHaveEmbeddedDocuments()

检查与模块关联的符号是否嵌入了文档。

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

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

TranslateAcceleratorTagByIP(UInt32, UInt32, UInt32, UInt32, UInt32, UInt32, UInt32, UInt32)

将加速器指针标记转换为 HLSL 寄存器属性。

TranslateAcceleratorTagByRva(UInt32, UInt32, UInt32, UInt32, UInt32, UInt32, UInt32, UInt32)

使用相对虚拟地址将加速器指针标记转换为 HLSL 寄存器属性。

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

UndecorateName(String, UInt32)

取消修饰符号名称。

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

适用于