如果在符号路径中包含字符串srv *,则调试器将使用 用于从默认符号存储区获取符号的符号服务器。对于 例如,以下命令告诉调试器使用符号 服务器从默认符号存储区获取符号。 这些符号是 没有缓存在本地计算机上。
.sympath srv *
然而,我发现的是符号 缓存。
我使用的是WinDbg 10,默认缓存文件似乎是在C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym
创建的。当我删除它们并运行路径设置为srv*
的可执行文件时,这里会下载符号。
文档错误吗?
答案 0 :(得分:6)
是的,文档错误(至少对于WinDbg 6.2.9200.16384)。
您可以输入上述命令来证明:
0:000> .sympath srv*
Symbol search path is: srv*
Expanded Symbol search path is: cache*;SRV*http://msdl.microsoft.com/download/symbols
因此,正如我们从WinDbg的输出中看到的那样,扩展的符号路径(实际将使用它)包含cache*
,表示将缓存符号。
您在documentation for WinDbg中找到了这个,这可能不是定义行为的正确位置,因为WinDbg本身并不加载符号。相反,它使用dbghelp.dll,并且在没有更新WinDbg帮助的情况下,该DLL的行为可能会发生变化。
符号路径语法很难习惯,文档遍布各处。扩展和默认目录的所有魔力使它更糟糕。
流程或多或少:
!homedir
。)答案 1 :(得分:1)
如果在WinDbg符号路径中使用special cache*path
token,WinDbg将从该令牌后面的源缓存符号。也可以将srv*localpath*serverpath
写入缓存从serverpath
到localpath
的符号。如果您不想缓存,请确保.sympath
不包含缓存。
此外,检查符号是否有效缓存(一次获取,重复使用多次)或仅存储在此WinDbg运行(每个会话获取一次)可能是值得的。