debugging - Vs2017 源不可用

标签 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

最佳答案

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

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

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

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

我接下来所做的,实际上解决了这个问题:

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

请注意,我仍然无法下载一些“优化符号”,例如 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 使用的同一缓存文件夹中

唷!!本来应该是微不足道的事情,真是麻烦啊!

关于debugging - Vs2017 源不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45574986/

相关文章:

javascript - 可以在三星平板电脑的 native 浏览器上调试 javascript

git - 如何在 Visual Studio 中根据最新的远程服务器刷新本地 GIT 分支?

c# - 尝试更好地理解共享项目并在不同的解决方案中使用它们

javascript - 符号.迭代器: get all the object's properties in iterator object

c - 读取一个数字,应该算作一个符号

.net - 在 Visual Studio 2015 中调试时值不正确

c++ - 获取执行的 windbg 命令的输出

windows - 禁止将 EXCEPTION_DEBUG_EVENT 传递给附加的调试器

mysql - 使用 F# 连接到 Visual Studio 2017 中的 MySQL 数据库

julia - 我如何在 Julia 中按值(value)发货?