微软符号服务器 路径,符号路径 - Win32 apps | Microsoft Docs

符号路径

05/31/2018

本文内容

Dbghelp.dll 库使用符号搜索路径) ( .pdb 和 dbg 文件查找调试符号。 搜索路径可以由由分号分隔的一个或多个路径元素组成。

指定搜索路径

若要指定符号处理程序将在磁盘目录中搜索符号文件的位置,请调用 SymSetSearchPath 函数。 或者,可以在 SymInitialize函数的 UserSearchPath 参数中指定符号搜索路径。

SymInitialize中的 UserSearchPath 参数和 SymSetSearchPath中的 SearchPath 参数采用一个指向以 null 结尾的字符串的指针,该字符串指定一个路径或用分号分隔的一系列路径。 符号处理程序使用这些路径来搜索符号文件。 如果此参数为 NULL,则符号处理程序会搜索包含要搜索符号的模块的目录。 否则,如果将此参数指定为非 NULL 值,则符号处理程序首先搜索应用程序设置的路径,然后再搜索模块目录。 如果设置了 _ nt _ 符号 _ 路径或 _ nt _ ALT _ 符号 _ 路径环境变量,则符号处理程序将按以下顺序搜索符号文件:

_NT _ 符号 _ 路径环境变量。

_NT _ ALT _ 符号 _ 路径环境变量。

包含相应模块的目录。

程序数据库的搜索路径 ( .pdb) 文件与调试 ( dbg) 文件的路径不同。 算法由符号库的功能确定。 默认情况下,Microsoft Visual C/c + + 会创建 Microsoft 格式符号,将它们从图像中抽出,然后将它们放在单独的 .pdb 文件中。 通常,.pdb 文件将位于包含可执行映像的目录中。 Visual C/c + + 将 .pdb 文件的绝对路径嵌入到可执行文件中。 如果符号处理程序找不到该位置的 .pdb 文件,或者 .pdb 文件已移到另一个目录,则符号处理程序将使用为 dbg 文件描述的搜索路径查找 .pdb 文件。

路径元素类型

有三种类型的路径元素。

标准路径元素

通过查看 path 元素所指定的目录的根目录来搜索标准路径元素。 符号处理程序还会在 "符号" 子目录中查找与正在查找符号的模块的文件扩展名相匹配的子目录。 通常为 "dll"、"exe" 或 "sys"。 最后,它会在名为 "符号" 的子目录中查找与该扩展插件同名的目录。 例如,如果符号路径元素为 "c: \ mySymbols",并且搜索符号所针对的文件为 "boo.dll",则将搜索以下目录。

c: \ mySymbols

c: \ mySymbols \ dll

c: \ mySymbols \ 符号 \ dll

符号处理程序使用此逻辑搜索任何不符合条件的路径元素,以作为 符号服务器 或 缓存 (如下) 所述。

Symbol 服务器路径元素

符号服务器 路径元素使用特殊技术,该技术可查找与相关模块完全匹配的符号。 有关更多详细信息,请参阅 使用 SymSrv 。

如果路径元素以文本 "srv" 开头,则符号处理程序将其视为符号服务器 * 。

备注

如果 * 未指定 "srv" 文本,但实际路径元素是符号服务器存储区,则符号处理程序将充当 "srv * "。 符号处理程序通过搜索指定路径的根目录中是否存在名为 "pingme.txt" 的文件来做出此决定。

缓存路径元素

缓存 路径元素是符号服务器路径元素上的变体。

搜索此目录,就像其他任何符号服务器一样。 但是,如果在此处找不到该符号并且它在符号路径链中的路径元素中找到,则会复制该符号,并将其存储在此元素中指定的符号服务器。

如果路径元素以文本 "cache" 开头,则符号处理程序将该路径元素视为缓存元素 * 。 若要在 "c: myCache" 中指定缓存 \ ,请使用 "cache * c: myCache" 的符号路径元素 \ 。

示例搜索路径

若要查看其工作原理,请设置此搜索路径。

cache*c:\myCache;srv*\\symbols\symbols

下面是使用上面列出的搜索路径搜索 ntdll.dll 时符号处理程序的详细输出的列表。

DBGHELP: .\ntdll.pdb - file not found

DBGHELP: .\dll\ntdll.pdb - file not found

DBGHELP: .\symbols\dll\ntdll.pdb - file not found

SYMSRV: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb not found

SYMSRV: ntdll.pdb from \\symbols\symbols: 10497024 bytes - copied

DBGHELP: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb already cached

DBGHELP: ntdll - private symbols & lines

c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb

第三行输出显示了处理的第一个路径元素的符号处理程序 . 。 这是一个标准路径元素。

第四行显示符号处理程序,该符号处理程序使用符号服务器在的第二个路径元素( cache*c:\myCache 该元素是缓存路径元素)中查找文件。

第五行显示文件位于的第三个路径元素中 srv*\\symbols\symbols ,后者是符号服务器路径元素。

第六行显示文件被复制到缓存中。

从缓存打开文件的最后两行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值