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 社区错误。
接下来我做了什么,实际上解决了它:
- 删除了我的符号缓存,其中包含误导性的 pdbs 而没有源代码
- 仅启用我的代码标志,禁用“启用 .NET Framework 源步进”并在调试模式下启动应用程序
- 在断点处暂停,在该断点处,我可以访问要调试的代码
- 双击这样的堆栈,然后点击加载符号。
- 这一次,出于某种原因,跳过了 Microsoft 符号服务器,并下载了正确的 pdb
请注意,我仍然无法下载一些 "optimized symbols",例如 system.net.http,但接下来我会尝试解决这个问题
此外,我使用它作为参考来设置符号服务器,这有助于我迅速获取任何第三方符号(.net 除外)
https://www.symbolsource.org/Public/Wiki/Using
编辑:
在 dotPeeker 的帮助下,我能够通过以下方式获取所有丢失的 pdb 文件:
- 正在将这些 dll 加载到 dotpeeker(例如:System.Net.Http)
- 从该 DLL 加载源文件之一
- 点击生成 PDB 并将其存储到 VS2017 使用的同一缓存文件夹中
呸!!本来应该是微不足道的事情,多麻烦!
我正在尝试通过单击堆栈跟踪来调试 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 社区错误。
接下来我做了什么,实际上解决了它:
- 删除了我的符号缓存,其中包含误导性的 pdbs 而没有源代码
- 仅启用我的代码标志,禁用“启用 .NET Framework 源步进”并在调试模式下启动应用程序
- 在断点处暂停,在该断点处,我可以访问要调试的代码
- 双击这样的堆栈,然后点击加载符号。
- 这一次,出于某种原因,跳过了 Microsoft 符号服务器,并下载了正确的 pdb
请注意,我仍然无法下载一些 "optimized symbols",例如 system.net.http,但接下来我会尝试解决这个问题
此外,我使用它作为参考来设置符号服务器,这有助于我迅速获取任何第三方符号(.net 除外)
https://www.symbolsource.org/Public/Wiki/Using
编辑:
在 dotPeeker 的帮助下,我能够通过以下方式获取所有丢失的 pdb 文件:
- 正在将这些 dll 加载到 dotpeeker(例如:System.Net.Http)
- 从该 DLL 加载源文件之一
- 点击生成 PDB 并将其存储到 VS2017 使用的同一缓存文件夹中
呸!!本来应该是微不足道的事情,多麻烦!