DkmModule 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
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。 |