【问题标题】:Debug .NET Core source调试 .NET Core 源
【发布时间】:2022-02-06 09:03:53
【问题描述】:

我使用 Visual Studio 2019 和 .NET Core 3 Web 应用程序。我想调试 .NET Core 源代码,因此当发生错误时,我可以深入研究代码并更详细地检查它。由于我找不到有关如何操作的确切描述(即使在 Microsoft 文档站点上),我将尝试在这里总结一下我目前所知道的。

我在 Visual Studio 中有以下选项:

  1. 只启用我的代码
  2. 启用 .NET 框架源代码步进
  3. 启用源服务器支持
  4. 启用源链接支持

前两个选项是互斥的。我想我应该选择第二个选项,虽然我不明白这个选项中的“.NET 框架”是否包含 .NET Core?

现在 .NET Core 是开源的并且可以在 GitHub 上获得,我不明白第三个和第四个选项。第三个应该允许我从 Microsoft 符号服务器中提取源代码(符号是否包含源代码?)而第四个应该允许我从 GitHub 中提取源代码?我需要其中一个吗?

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

让我们再试一次,这次选择第四个选项(并取消选择第三个选项)。现在,在断点被命中后,Visual Studio 让我可以通过 Source Link 下载前面提到的文件。我接受,但结果是消息

源链接错误:Azure DevOps:所有帐户的身份验证都失败。使用“文件 -> 帐户设置...”添加新帐户或刷新凭据。

嗯,我已使用我的 Microsoft 帐户登录。我还应该做什么?

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

现在我选择另一个 Source Link 选项:“回退到 Git 凭据管理器...”并重新开始。同样的结果。

当然,我在 Google 上进行了广泛搜索,并花了很长时间试图找到解决方案,但我遗漏了一些东西。我很感激有关上述选项的确切作用以及如何通过进入 .NET Core 源代码进行调试的帮助。

【问题讨论】:

  • 所有这些都在文档和多篇文章中进行了解释。 symbol servers, symbol sources 之间的区别也许可以追溯到 VS 2010?他们不是 Github。符号服务器提供调试任何 DLL 所需的 PDB 文件,包括 Windows dll 的 PDB。如果没有 PDB,源文件将毫无用处,因为调试器无法知道哪些指令与源中的哪个位置匹配。
  • SourceLink 是新的,它允许 NuGet 包指向生成它们的源文件,有点像源服务器。 NuGet 文件必须包含 pdb 符号文件
  • 在 VS2019 中将 nuget 符号服务器添加到符号服务器:blog.nuget.org/images/…
  • 请参阅Debug .NET and ASP.NET Core source code,它具有明确的 Microsoft 说明并得到支持和维护。

标签: debugging asp.net-core visual-studio-debugging visual-studio-2019


【解决方案1】:

也许this issue 可以提供帮助 解决你的难题。

就像vancem 在那个问题中描述的那样,调试 .net 核心源代码所需要做的就是:

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

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

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

“找不到GenericHostBuilderExtensions.cs”。

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

实际上,如果你按照上面的选项,你会找到you can debug well .net core 2.x web-app,但可能会失败for not finding source links for .net core 3.0

作为一种解决方法:

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

2.GenericHostBuilderExtensions.cs的GenericHostBuilderExtensions.cs的来源可以在here找到。我重现了同样的问题,通过下载xx.cs并在调试时找到它来解决。

3.但我不得不说这种方式需要一些时间。由于不仅这个文件没有源文件,我们也会遇到类似的问题,除非.net core3.0中的所有源都有其源链接,否则必须从git中获取相应的源来解决。但这可能需要一些时间,对于给您带来的不便,我们深表歉意。我建议您可以将其发布在 github 上并在此处分享链接。对它感兴趣的成员将帮助投票。

希望以上所有帮助。

【讨论】:

    猜你喜欢
    • 2021-04-05
    • 2019-09-08
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多