我检查了 Visual Studio 中的“启用 .NET Framework 源代码步进”调试选项创建了一个符号缓存目录。现在,当我调试项目时,Visual Studio 会创建一个对话框,显示“正在下载公共符号”并列出引用的模块。这发生在每个引用的模块上。
结果是我有时要等几分钟才能真正开始调试。
可以点击“取消”并直接进行调试。然后下一次我调试它从它停止的地方开始。
查看我的 HTTP 流量,似乎每个模块都在 referencesource.microsoft.com 中查找符号。由该服务器托管的符号(即,像 system.dll 这样的 Microsoft 模块)被下载到符号缓存中。其他符号在符号缓存的“FailedLoads”文件夹中获取一个文件,其中包含文本“PDB Not Found”。即使选中了“将源服务器诊断信息消息打印到输出窗口”,在“输出”窗口中也找不到有关故障的信息。
一旦模块在缓存中有符号或在 FailedLoads 文件夹中有文件,它不会导致对话框再次出现。因此,让进程完成一次可以解决缓慢的调试启动时间,直到添加新的引用。
我尝试了几件事,看看会发生什么。没有任何东西指向真正的解决方案。
- 取消选中“启用 .NET Framework 源单步执行”可解决问题
- 设置自动加载符号以默认包含或排除不会改变行为
- 从自动加载符号中包含或排除特定模块不会改变该模块的行为
- 选中/取消选中“启用源服务器支持”或其任何子选项不会改变行为
- 选中/取消选中“Microsoft Symbol Servers”符号位置不会改变行为
- 添加新符号位置不会改变行为。这些新符号服务器上可用的模块最终仍位于 FailedLoads 文件夹中,并且在“下载公共符号”对话框期间不会向它们发出 HTTP 请求。
- 通过其他方式(例如,在调试时从不同的符号服务器加载)将符号放入符号缓存中可以避免该模块的“下载公共符号”对话框。
我已经在 VS2013 Update 1、VS2015 Update 3 和 VS2017 RC 上重现了这个问题。有趣的是,我相信我多年来一直使用 VS2013 没有这个问题。我认为它是在几个月前我切换到 VS2015 的时候开始的。
有谁知道这是否是一个已知的错误,或者是否有办法在禁用此行为的同时启用 .NET Framework 源单步执行?