c++ - WinDbg SRV* 的文档有误吗?

标签 c++ windbg

documentation说:

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 的行为可能会发生变化。


符号路径语法真的很难习惯,文档遍布各处。扩展和默认目录的所有魔力使它变得更糟。

流量或多或少:

  1. 在“;”处拆分符号路径进入数组元素
  2. 对于元素中的每个元素:
    1. 根据元素的开头切换:
      1. “缓存*”:
        1. 确定缓存路径:
          1. 如果星号后有路径,则使用该路径。
            否则使用默认缓存路径。
          2. 缓存此路径中所有以下元素的符号。
      2. “symsrv*”:
        1. 将“*”处的元素拆分为(主要是路径)组件。
        2. 第一个组件是要使用的符号服务器 DLL。
        3. 接下来的组成部分是路径。对于每个路径:
          1. 路径 中寻找符号。路径可以是其中之一
            • 本地目录。
            • UNC.
            • HTTP 或 HTTPS URL - 必须是最后一个路径
            • 空字符串 - 表示默认符号存储。 (参见 SymSetHomeDirectory!homedir。)
          2. 如果找到:
            1. 将符号复制到此元素中的所有之前的路径
            2. 完成符号搜索
      3. “服务*”:
        • 与“symsrv*symsrv.dll*”相同。
      4. 否则:
        1. 元素 视为路径并在那里查找符号。 (没有像 symsrv.dll 那样的散列等。)

关于c++ - WinDbg SRV* 的文档有误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38086281/

相关文章:

crash - 如何在 Windbg 中找到应用程序崩溃的根本原因?

windbg - 如何安装正确版本的windbg?

windbg - 在 WinDbg 中查看根对象

c++ - 是否需要在原始指针位置调用delete[]

c++ - 在丰富的编辑文本控件中检测换行符

c++ - 将指针复制到 aiScene

c++ - 是否可以将 int 添加到 pair 中?

C++ 终止等待 std::thread

mfc - WinDbg 在 msdl.microsoft.com 上找不到 mfc90 版本 9.0.30729.4148 符号

windbg - 如何使用WinDbg调试驱动程序