Debugging 调试.NET核心源代码(Visual Studio 2019)

Debugging 调试.NET核心源代码(Visual Studio 2019),debugging,asp.net-core,visual-studio-debugging,visual-studio-2019,Debugging,Asp.net Core,Visual Studio Debugging,Visual Studio 2019,我使用Visual Studio 2019和.NET Core 3 web应用程序。我想调试.NET核心源代码,因此当出现错误时,我可以深入到代码中并更详细地检查它。由于我找不到关于如何操作的确切描述(甚至在Microsoft文档网站上),我将尝试在这里总结我目前所知道的内容 我在Visual Studio中有以下选项: 仅启用我的代码 启用.NET framework源代码单步执行 启用源服务器支持 启用源链接支持 前两种选择是相互排斥的。我想我应该选择第二个选项,尽管我不了解天气。这

我使用Visual Studio 2019和.NET Core 3 web应用程序。我想调试.NET核心源代码,因此当出现错误时,我可以深入到代码中并更详细地检查它。由于我找不到关于如何操作的确切描述(甚至在Microsoft文档网站上),我将尝试在这里总结我目前所知道的内容

我在Visual Studio中有以下选项:

  • 仅启用我的代码
  • 启用.NET framework源代码单步执行
  • 启用源服务器支持
  • 启用源链接支持
前两种选择是相互排斥的。我想我应该选择第二个选项,尽管我不了解天气。这个选项中的“.NET framework”包括.NET核心吗

现在,由于.NETCore是开源的,可以在GitHub上使用,我不理解第三和第四选项。第三个应该允许我从Microsoft符号服务器中提取源代码(符号是否包括源代码?),而第四个应该允许我从GitHub中提取源代码?我需要一个还是另一个

首先,我在Main方法中的CreateHostBuilder上放置了一个断点,选择第三个选项并运行应用程序。在断点被点击后,我继续进入代码(F11),直到出现一条消息说“找不到GenericHostBuilderExtensions.cs”。它让我可以浏览它,但我不知道在哪里可以找到它

让我们再试一次,这次选择第四个选项(并取消选择第三个)。现在,在命中断点之后,VS提供我通过源链接下载前面提到的文件。接受,但结果是消息“源链接错误:Azure DevOps:所有帐户的身份验证失败。请使用“文件->帐户设置…”添加新帐户或刷新凭据。“好吧,我已使用Microsoft帐户登录,我还应该做些什么?”

我再重复一遍,这次选择第三和第四选项。结果是一样的

现在我选择另一个源链接选项:“退回到Git Credential manager…”并重新开始。同样的结果

当然,我在谷歌上搜索了很多次,花了很多时间试图找到一个解决方案,但我遗漏了一些东西。如果您能帮助我了解上述选项的具体功能,以及如何通过进入.NET核心源代码进行调试,我将不胜感激

也许能帮上忙 解决你的难题

正如该期文章中所述,调试.net核心源代码所需的全部工作如下:

1.取消选中(工具->选项->调试->仅我的代码)复选框

2.确保已设置(工具->选项->调试->符号设置->Microsoft符号服务器)复选框

3.确保选中(工具->选项->调试->启用源链接支持)复选框

“找不到GenericHostBuilderExtensions.cs”

至于你为什么在这里失败。我认为这与我上面提供的问题类似。对于.NETCore3.0预览版,它的一些库目前在github中没有源链接,因此vs无法获取它们。(就像2017年的.net core 2.0一样,现在已经修复)

实际上,如果您遵循上面的选项,您会发现
您可以很好地调试.net core 2.x web app
,但可能会因为找不到.net core 3.0的源链接而失败

作为解决办法:

1.您可以尝试从git手动获取源代码,然后转到解决方案->属性->调试源文件,然后将您的目录添加到“包含源代码的目录”中,以检查在某些情况下是否有帮助。(这由vancem详细描述,感谢他)

2.可以找到GenericHostBuilderExtensions.cs的
GenericHostBuilderExtensions.cs
的源代码。我复制了相同的问题,通过下载xx.cs并在调试过程中找到它来解决

3.但我不得不说,这样做需要一些时间。由于不仅此文件没有源文件,我们还会遇到类似的问题,必须通过从git获取相应的源文件来解决,除非.net core3.0中的所有源文件都有其源链接。但这可能需要一些时间,很抱歉给您带来不便。我建议你可以把它发布在github上,并在这里共享链接。对它感兴趣的成员将帮助投票


希望以上都能有所帮助。

所有这些都在文档和多篇文章中进行了解释。两者之间的区别可以追溯到2010年?他们不是Github。符号服务器提供调试任何DLL(包括用于Windows DLL的PDB)所需的PDB文件。如果没有PDB,源文件将毫无用处,因为调试器无法知道哪些指令与源中的哪个位置匹配。是新的,允许NuGet包指向生成它们的源文件,有点像源服务器。NuGet文件必须包括
pdb
symbol文件,尽管在VS2019中将NuGet symbol服务器添加到symbol服务器:您好,Marko,是否有此问题的更新?@Marko这将向您展示如何执行此操作: