调试 ASP .Net Core 符号和源代码不匹配

Debugging ASP .Net Core symbols and source don't match

我正在尝试追踪 MVC 的问题,所以我想我会进入 ASP .NET Core 源代码。我已经取消选中 "Enable Just My Code" 并选中了 "Enable .NET Framework source stepping"(尽管我想这不是必需的)。我还检查了 "Enable source server support" 并启用了 Microsoft 符号服务器。

我踏入这一行

app.UseMvc();

最终我在 MvcApplicationBuilderExtensions.cs 中找到了这段代码。

VerifyMvcIsRegistered(app);

var options = app.ApplicationServices.GetRequiredService<IOptions<MvcOptions>>();

if (options.Value.EnableEndpointRouting)
{

单步执行这段代码时,程序计数器开始跳动,我收到一个错误,指出几个局部变量无法获取值,因为它不可用或已被优化掉。我假设这是因为源文件和符号文件不匹配。

我是 运行 2019 年 Visual Studio。它是 .net Core 2.2.203。我已经删除了符号缓存和 SourceServer 缓存。我想弄清楚我在代码中做错了什么以及具体原因。

实际上,在过去的几年里,我曾多次尝试调试 .NET 源代码,但我总是遇到同样的问题。 None 的联机帮助好像有答案。是我做错了什么还是这只是不可靠?

如果您想调试 .NET Core 源代码,可以从 github (https://github.com/dotnet/corefx) 下载。非常容易调试,喜欢自己的项目。

有非常好的视频,其中解释了 .NET Core MVC 请求生命周期的工作原理 (https://app.pluralsight.com/library/courses/aspnet-core-mvc-request-life-cycle/table-of-contents),也许您可​​以在那里找到您需要的信息。

P.S。您可以使用 Microsoft 帐户免费获得 3 个月的 pluralsight。

消息准确无误,并准确解释了发生的情况。它与不匹配的符号无关。

如消息所解释的(非)问题是 IL 在编译期间已被优化,那些变量不再存在。发布版本执行大量优化,通常最终会消除不需要的代码部分。

函数可以而且经常是内联的。例如,变量可以用寄存器代替。可以完全消除环路。当该代码 运行s 时,变量或函数不再存在,因此无法显示。

调试符号仍然可以在发布版本中生成。不过,它们将反映为发布版本生成的 IL。需要在调试配置中编译的程序集才能获得与源匹配的 IL,无需任何优化。

对于 .NET Core 运行时间,我们自己的代码 运行 发布版本和所有 NuGet 包都是如此。