我正在尝试分析一些迷你崩溃转储。我正在使用Windows 10 Pro Build 1607和WinDbg 10.0.14321.1024。我将符号文件路径设置为
SRV*C:\SymCache*https://msdl.microsoft.com/download/symbols
基本上,每当我加载一个minidump(所有< 1 MB .dmp文件)时,永远需要WinDbg实际分析它们。我知道第一次运行可能需要很长时间,但是在它让我输入命令之前差不多花了12个小时。我认为,由于符号被缓存,重新打开相同的.dmp将花费很长时间。不是这种情况。它加载,几乎瞬间到“加载内核符号”,然后再打印“BugCheck”行再过30分钟。又过了30分钟,我仍然无法输入命令。
我的电脑有512 GB SSD,8 GB RAM和i5-4590。我认为不应该这么慢。
我做错了什么?
答案 0 :(得分:10)
这种抱怨似乎最近经常发生,我可以在我的电脑上重现它。这不是你的错,而是微软方面的互联网或符号服务器的一些问题。
使用Wireshark监控流量并查看我的磁盘如何填充符号缓存,我可以说:
答案 1 :(得分:6)
这是真正慢的符号服务器。其他人也注意到了:https://twitter.com/BruceDawson0xB/status/772586358556667904
你的符号路径包含一个本地缓存,所以它下次应该加载得更快,但似乎缓存无效,我不知道为什么(我怀疑下载的符号不是完美的匹配,它们是每次都要再次下载。
我建议只修改_NT_SYMBOL_PATH
(或者你的同情心被初始化的方式)到SRV*C:\SymCache
,即。不要尝试自动下载,只需使用您已在本地缓存的符号。图像应该打开得相当快。仅在发现缺失符号时才启用符号服务器。
答案 2 :(得分:1)
我遇到了同样的问题(windbg 非常慢),但是加载/重新加载/修复/缓存符号没有帮助。偶然地,我发现当我尝试使用从寄存器中获取的地址打印内存时,这个问题仍然存在,例如
db rax
经验法则是始终将 @ 与注册名称一起使用。
db @rax
如果没有这个符号,调试器会认为 rax 是一个符号名称,并寻找它一段时间(取决于您加载的符号数量),但最终找不到它,并落下回到将其视为注册名称。使用 @ 符号从寄存器打印内存可以立即生效,即使您在内存中加载了大量符号。如您所见,此问题也与符号相关,但方式不同。