查找符号

将符号文件加载到符号处理程序后,应用程序可以使用符号定位器函数返回指定地址的符号信息。 这些函数还可以查找地址的源代码文件名和行号位置。

枚举符号文件

若要检索模块名称加载的所有符号文件的列表,请调用 SymEnumerateModules64 函数。 有关示例,请参阅枚举符号模块。 若要检索给定模块的符号列表,请调用 SymEnumSymbols 函数。 有关示例,请参阅枚举符号

按地址检索符号

若要检索特定地址的符号信息,请使用 SymFromAddr 函数。 此函数会检索信息并将其存储在 SYMBOL_INFO 结构中。 由于符号名称长度可变,因此必须在 SYMBOL_INFO 结构声明之后提供额外的缓冲区空间。 有关示例,请参阅按地址检索符号信息

请注意,地址不需要位于符号边界上。 如果地址位于符号开头之后,但在符号末尾之前(符号开头加符号大小),则函数将找到此符号。

按符号名称检索符号

若要检索特定模块和符号名称的 SYMBOL_INFO 结构中的符号信息,请使用 SymFromName 函数。 如果设置了延迟的符号加载, 则 SymFromName 将尝试加载模块的符号文件(如果尚未加载)。 若要指定模块名称以及符号名称,请使用语法 Module!SymName。 "!" 字符分隔模块名称与符号名称。 有关示例,请参阅按名称检索符号信息

按地址检索行号

若要检索特定地址的源代码位置,请使用 SymGetLineFromAddr64 函数。 此函数填充 IMAGEHLP_LINE64 结构,该结构包括指定地址引用的源文件名称和行号位置。 有关示例,请参阅按地址检索符号信息

按符号名称检索行号

若要检索特定符号名称的源代码位置,请使用 SymGetLineFromName64 函数。 此函数类似于 SymGetSymFromName64,但检索 IMAGEHLP_LINE64 结构。 若要使用 SymGetLineFromAddr64SymGetLineFromName64,则必须使用 SymSetOptions 函数设置加载行选项 (SYMOPT_LOAD_LINES)。 有关示例,请参阅按名称检索符号信息