debugging - 如何让Windbg下载MS公共符号压缩版
问题描述
微软在这里声明:
Microsoft 符号服务器提供符号文件的压缩版本。这些文件在文件扩展名的末尾有一个下划线,表示它们已被压缩。例如,ntdll.dll 的 PDB 可用作 ntdll.pd_。
我在这里有两个问题:
更一般的问题:如何使 Windbg 更喜欢符号的压缩版本?这将节省大量带宽。(在我的计算机上压缩 c:\Symbols 导致大小减少了 68%)。嗅探流量显示,首先尝试的是未压缩版本,然后是压缩版本(名称末尾的下划线)。
并且特定于 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
然而,使用提琴手检查流量显示仍然首先请求未压缩版本。
解决方案
推荐阅读
- sql - 如何在列中找到缺失的序列?sql服务器
- .net - .NET 5 无法正确显示 PropertyGrid
- amazon-web-services - 有什么方法可以避免破坏和重新创建子网,同时使用 count 方法创建子网而不是一个一个地创建子网?
- javascript - 删除网格中行下方的空白
- python - 难以让 google-coral example-object-detection 正常工作
- c# - 根据一个字符或另一个字符提取部分文本
- elasticsearch - Kibana:显示带有特定标签的日志
- java - 如何解决 org.apache.camel.FailedToCreateProducerException CaughtExceptionMessage: Failed to create Producer for endpoint?
- python - 有没有像 Django 的拱单元这样的库?
- java - Android Java Alarm Manager Pending Intent 无法删除