【问题标题】:How to force ASP.NET Core source code to not be optimized如何强制不优化 ASP.NET Core 源代码
【发布时间】:2021-03-23 15:25:23
【问题描述】:

我正在尝试在 ASP.NET Core 框架中调试 Antiforgery 代码。

我已经按照https://github.com/dotnet/aspnetcore/blob/master/docs/BuildFromSource.md 中的说明使用调试配置成功构建了代码。

我已将源代码项目添加到我的测试项目中并引用它。

我已检查配置是否设置为调试。

我已确定“抑制 JIT 优化”已被选中。

Project Properties -> Build 中的“Optimize Code”对两个项目都没有选中。

两个项目的“高级选项”(在“构建”选项卡下)中的“调试信息”下拉菜单已设置为“完整”。

但是,当我在 DefaultAntiforgeryTokenSerializer.Serialize() 中遇到断点时,在 Watch 窗口中查看方法的本地变量时会出现此错误:

无法获取本地或参数的值,因为它在 这个指令指针,可能是因为它已经被优化掉了

如何强制不优化代码?

我正在使用 Visual Studio Enterprise 2019 v16.8.3。

【问题讨论】:

  • 创建一个名为Microsoft.AspNetCore.Antiforgery.ini的文件,然后将其放入存在Microsoft.AspNetCore.Antiforgery.dllMicrosoft.AspNetCore.Antiforgery项目的输出文件夹中。然后,将这些添加到该文件中:[.NET Framework Debugging Control] GenerateTrackingInfo=1 AllowOptimize=0。此外,为您的测试项目创建一个名为AntiforgeryTest.ini 的文件,然后执行相同的步骤。参考文档为here
  • 我认为您可以打开 (ctrl-o) 您不想调试的 cs 文件,它应该可以工作吗?
  • @onedevteam.com 如果这么简单我就不会输入这个问题了。

标签: c# asp.net-core visual-studio-debugging


【解决方案1】:

将 Antiforgery 源代码项目添加到我的解决方案后,我不得不引用 C:\aspnetcore\artifacts\bin\Microsoft.AspNetCore.Antiforgery\Debug\net5.0 中的 dll,而不是向 .csproj 文件添加项目引用。

我现在可以在 Watch 窗口中查看本地变量的值。

这里有一个教程: https://medium.com/gitconnected/how-to-debug-asp-net-core-source-code-448544c16473

【讨论】:

【解决方案2】:

https://github.com/dotnet/AspNetCore.Docs/issues/4155 的完整说明

  • 在工具 -> 选项 -> 调试 -> 常规中取消选中仅启用我的代码
  • 在工具 -> 选项 -> 调试 -> 符号中启用 Microsoft 符号服务器

微软在https://docs.microsoft.com/en-us/aspnet/core/test/debug-aspnetcore-source的完整维护说明

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2011-08-01
    • 2014-06-24
    • 2015-09-19
    • 2011-04-09
    相关资源
    最近更新 更多