WinDbg应该是如此极其缓慢吗?

时间:2016-09-05 17:29:19

标签: windbg crash-dumps

我正在尝试分析一些迷你崩溃转储。我正在使用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。我认为不应该这么慢。

我做错了什么?

3 个答案:

答案 0 :(得分:10)

这种抱怨似乎最近经常发生,我可以在我的电脑上重现它。这不是你的错,而是微软方面的互联网或符号服务器的一些问题。

使用Wireshark监控流量并查看我的磁盘如何填充符号缓存,我可以说:

  • 一次只下载一个文件。
  • 旧版WinDbg版本(6.2.9200)
  • 也会出现此问题
  • HTTP和HTTPS出现问题
  • 当找到符号时,传输速度非常慢,然后增加。有效传输速率下降到11 kb / s到20 kb / s(在可以处理6500 kb / s的线路上)
  • 有相当多的数据包乱序,重复数据包等,特别是在查找阶段"尚未下载文件的地方。这样的查找阶段很容易花费8分钟。
  • 即使文件已经存在于磁盘上,"查找阶段"执行。
  • HTTP往返时间(响应请求)为8到9秒

WinDbg loading kernel symbols

Lookup phase

HTTP roundtrip times

答案 1 :(得分:6)

这是真正慢的符号服务器。其他人也注意到了:https://twitter.com/BruceDawson0xB/status/772586358556667904

你的符号路径包含一个本地缓存,所以它下次应该加载得更快,但似乎缓存无效,我不知道为什么(我怀疑下载的符号不是完美的匹配,它们是每次都要再次下载。

我建议只修改_NT_SYMBOL_PATH(或者你的同情心被初始化的方式)到SRV*C:\SymCache,即。不要尝试自动下载,只需使用您已在本地缓存的符号。图像应该打开得相当快。仅在发现缺失符号时才启用符号服务器。

答案 2 :(得分:1)

我遇到了同样的问题(windbg 非常慢),但是加载/重新加载/修复/缓存符号没有帮助。偶然地,我发现当我尝试使用从寄存器中获取的地址打印内存时,这个问题仍然存在,例如

db rax 

经验法则是始终将 @ 与注册名称一起使用。

db @rax 

如果没有这个符号,调试器会认为 rax 是一个符号名称,并寻找它一段时间(取决于您加载的符号数量),但最终找不到它,并落下回到将其视为注册名称。使用 @ 符号从寄存器打印内存可以立即生效,即使您在内存中加载了大量符号。如您所见,此问题也与符号相关,但方式不同。