If you include the string srv* in your symbol path, the debugger uses a symbol server to get symbols from the default symbol store. For example, the following command tells the debugger to use a symbol server to get symbols from the default symbol store. These symbols are not cached on the local computer.
.sympath srv*
但是我发现符号被缓存了。
我使用的是 WinDbg 10,默认缓存文件似乎创建于 C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym
当我删除它们并运行时路径设置为 srv*
的可执行文件,符号在此处下载。
那么文档有错吗?
最佳答案
是的,文档是错误的(至少对于 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 的行为可能会发生变化。
符号路径语法真的很难习惯,文档遍布各处。扩展和默认目录的所有魔力使它变得更糟。
流量或多或少:
- 在“;”处拆分符号路径进入数组元素。
- 对于元素中的每个元素:
- 根据元素的开头切换:
- “缓存*”:
- 确定缓存路径:
- 如果星号后有路径,则使用该路径。
否则使用默认缓存路径。 - 缓存此路径中所有以下元素的符号。
- 如果星号后有路径,则使用该路径。
- 确定缓存路径:
- “symsrv*”:
- 将“*”处的元素拆分为(主要是路径)组件。
- 第一个组件是要使用的符号服务器 DLL。
- 接下来的组成部分是路径。对于每个路径:
- 在路径 中寻找符号。路径可以是其中之一
- 本地目录。
- UNC.
- HTTP 或 HTTPS URL - 必须是最后一个路径。
- 空字符串 - 表示默认符号存储。 (参见 SymSetHomeDirectory 和
!homedir
。)
- 如果找到:
- 将符号复制到此元素中的所有之前的路径。
- 完成符号搜索
- 在路径 中寻找符号。路径可以是其中之一
- “服务*”:
- 与“symsrv*symsrv.dll*”相同。
- 否则:
- 将元素 视为路径并在那里查找符号。 (没有像 symsrv.dll 那样的散列等。)
- “缓存*”:
- 根据元素的开头切换:
关于c++ - WinDbg SRV* 的文档有误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38086281/