首页 > 解决方案 > 如何让Windbg下载MS公共符号压缩版

问题描述

微软在这里声明:

Microsoft 符号服务器提供符号文件的压缩版本。这些文件在文件扩展名的末尾有一个下划线,表示它们已被压缩。例如,ntdll.dll 的 PDB 可用作 ntdll.pd_。

我在这里有两个问题:

  1. 更一般的问题:如何使 Windbg 更喜欢符号的压缩版本?这将节省大量带宽。(在我的计算机上压缩 c:\Symbols 导致大小减少了 68%)。嗅探流量显示,首先尝试的是未压缩版本,然后是压缩版本(名称末尾的下划线)。

  2. 并且特定于 MS 公共符号:压缩版本目前是否可用?尝试手动下载 ntdll.pdb 的压缩版本会返回 404 错误。

    >$ wget https://msdl.microsoft.com/download/symbols/ntdll.pdb/38A5841BD353770D9C800BF1AF6B17EB1/ntdll.pdb
    ... 
    ntdll.pdb                                 100%[=====================================================================================>]   1.46M   406KB/s    in 4.4s
    2018-11-11 01:16:56 (341 KB/s) - ‘ntdll.pdb’ saved [1534976/1534976]
    
    >$ wget https://msdl.microsoft.com/download/symbols/ntdll.pdb/38A5841BD353770D9C800BF1AF6B17EB1/ntdll.pd_
    ....
    HTTP request sent, awaiting response... 404 Not Found
    2018-11-11 01:17:01 ERROR 404: Not Found.
    

更新:

我现在发现 DbgHelp支持一个名为 SYMOPT_FAVOR_COMPRESSED 的选项,解释如下:

如果同时存在未压缩文件和压缩文件,请选择压缩文件。此选项适用于慢速连接。

现在的问题是如何在 Windbg 中启用这个选项?

此选项未记录在官方 Windbg 文档中,手动设置似乎只会影响 UI 级别。

0:003> .symopt+ 0x800000
Symbol options are 0x830337:
  0x00000001 - SYMOPT_CASE_INSENSITIVE
  0x00000002 - SYMOPT_UNDNAME
  0x00000004 - SYMOPT_DEFERRED_LOADS
  0x00000010 - SYMOPT_LOAD_LINES
  0x00000020 - SYMOPT_OMAP_FIND_NEAREST
  0x00000100 - SYMOPT_NO_UNQUALIFIED_LOADS
  0x00000200 - SYMOPT_FAIL_CRITICAL_ERRORS
  0x00010000 - SYMOPT_AUTO_PUBLICS
  0x00020000 - SYMOPT_NO_IMAGE_SEARCH
  0x00800000 - SYMOPT_FAVOR_COMPRESSED

然而,使用提琴手检查流量显示仍然首先请求未压缩版本。

标签: debuggingwindbgdebug-symbols

解决方案


推荐阅读