使用符号

有关符号的概述,包括使用符号文件和符号服务器,请参阅 符号

符号名称和位置

若要查找给定名称的符号的位置,请使用 GetOffsetByName。 有关用于指定符号名称的语法的详细信息,请参阅 符号语法和符号匹配

如果不知道符号的确切名称,或多个符号具有相同的名称, StartSymbolMatch 将开始搜索其名称与给定模式匹配的符号。 有关语法的详细信息,请参阅 字符串通配符语法

若要查找给定位置的符号的名称,请使用 GetNameByOffset。 若要查找给定位置附近的模块中的符号名称,请使用 GetNearNamebyOffset

注意 尽可能使用模块名称限定符号 ,例如 mymodule!main。 否则,如果符号不存在 (例如,由于拼写错误) 引擎必须加载并搜索每个模块的符号;这可能是一个缓慢的过程,尤其是对于内核模式调试。 如果符号名称是使用模块名称限定的,则引擎只需搜索该模块的符号。

符号是使用 结构唯一标识 DEBUG_MODULE_AND_ID。 此结构由 GetSymbolEntriesByNameGetSymbolEntriesByOffset 方法返回,这些方法分别基于符号的名称和位置搜索符号。

方法 GetSymbolEntryInformation 使用 DEBUG_SYMBOL_ENTRY 返回 符号 的说明。

若要查找结构中字段的偏移量,请使用 GetFieldOffset。 若要查找给定结构内索引的字段的名称,请使用 GetFieldName。 若要查找给定其值的枚举常量的名称,请使用 GetConstantName

GetSymbolInformation 方法可以执行多个有关符号信息的请求。

符号选项

许多选项控制符号的加载和卸载方式。 有关这些选项的说明,请参阅 设置符号选项

符号选项可能通过使用 AddSymbolOptions 打开,并通过使用 RemoveSymbolOptions 关闭

GetSymbolOptions 返回当前符号选项。 若要一次设置所有符号选项,请使用 SetSymbolOptions

重新加载符号

加载符号文件后,引擎将符号信息存储在内部缓存中。 若要刷新此缓存,请使用 Reload。 现在或以后必须再次加载这些符号。

合成符号

合成符号 是一种标记任意地址的方法,方便参考。 可以在任何现有模块中创建合成符号。 AddSyntheticSymbol 方法创建新的合成符号。 可以使用 RemoveSyntheticSymbol 删除合成符号。 重新加载模块的符号会删除与该模块关联的所有合成符号。

符号路径

若要将目录或符号服务器添加到符号路径,请使用 AppendSymbolPath 方法。 整个符号路径由 GetSymbolPath 返回,可以使用 SetSymbolPath 进行更改