Vs2017来源不可用

时间:2017-08-08 17:54:07

标签: debugging visual-studio-2017 symbols

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

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

我的“我的代码已禁用”,我有以下符号服务器:

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

我确实有pdb可用,但是我得到以下错误/图像。

如何正确克服它?

为什么在Visual Studio中调试第三方源代码会如此麻烦?

enter image description here

2 个答案:

答案 0 :(得分:8)

在按照@Jack Zhai-MSFT指出的链接后,我终于能够理解.net框架无法调试的原因。

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

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

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

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

  1. 删除了我的符号缓存,该缓存在没有源
  2. 的情况下具有误导性的pdbs
  3. 仅启用我的代码标记,禁用“启用.NET Framework源代码”并在调试模式下启动应用程序
  4. 在断点处暂停,在堆栈中,我可以访问我想要调试的代码
  5. 双击此类堆栈,然后点击“加载符号”。
  6. 这次,由于某种原因,我们跳过了Microsoft Symbol Server,并且下载了正确的pdbs
  7. 请注意,我仍然无法下载像system.net.http这样的“优化符号”,但我会尝试下一步

    另外,我使用它作为参考来设置符号服务器,这有助于我及时获得任何第三方符号(除了.net)

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

    enter image description here

    编辑:

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

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

      唷!!对于应该是微不足道的事情来说真是麻烦!

答案 1 :(得分:1)

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

参考:

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

更新

如果您只想调试.NET源代码,请参阅:How do I debug .NET 4.6 framework source code in Visual Studio 2017?