VS2017 源码不可用

Vs2017 Source Not Available

我正在尝试通过单击堆栈跟踪来调试 System.Net.Http.Formating.dll:

System.Net.Http.Formatting.dll!System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStreamAsync.AnonymousMethod__c()

我有 "Just my code disabled" 并且我有以下符号服务器:

https://nuget.smbsrc.net
http://localhost:33417/ (dot peek)
Microsoft Symbol Server

我确实有可用的 pdb,但是我得到以下 error/image。

如何正确克服呢?

为什么在 Visual Studio 调试第三方源代码这么麻烦?

要调试第三方源代码,您可以使用 .NET Reflector 或 dotPeek 与 VS。

参考:

Is it possible to actually debug 3rd party code using the source decompiled with dotPeek?

更新:

如果您只想调试 .NET 源代码,请参阅:

按照@Jack Zhai-MSFT 的link 指点,我终于明白了.net framework 无法调试的原因

原来是在没有各自来源的情况下下载符号,因为我指向的是 Microsoft Symbol Server 而不是 http://referencesource.microsoft.com/symbols

然后,我接下来的尝试是取消选中 "Microsoft Symbols Server" 或更改“符号”菜单中的顺序。令我惊讶的是,我无法删除它,也无法更改顺序,而且,即使在它被禁用后,符号仍然从那里获取。

也许这是一个 VS2017 社区错误。

接下来我做了什么,实际上解决了它:

  1. 删除了我的符号缓存,其中包含误导性的 pdbs 而没有源代码
  2. 仅启用我的代码标志,禁用“启用 .NET Framework 源步进”并在调试模式下启动应用程序
  3. 在断点处暂停,在该断点处,我可以访问要调试的代码
  4. 双击这样的堆栈,然后点击加载符号。
  5. 这一次,出于某种原因,跳过了 Microsoft 符号服务器,并下载了正确的 pdb

请注意,我仍然无法下载一些 "optimized symbols",例如 system.net.http,但接下来我会尝试解决这个问题

此外,我使用它作为参考来设置符号服务器,这有助于我迅速获取任何第三方符号(.net 除外)

https://www.symbolsource.org/Public/Wiki/Using

编辑:

在 dotPeeker 的帮助下,我能够通过以下方式获取所有丢失的 pdb 文件:

  1. 正在将这些 dll 加载到 dotpeeker(例如:System.Net.Http)
  2. 从该 DLL 加载源文件之一
  3. 点击生成 PDB 并将其存储到 VS2017 使用的同一缓存文件夹中

呸!!本来应该是微不足道的事情,多麻烦!