【问题标题】:Debugging not hit breakpoints in .NET CORE MVC 6 application在 .NET CORE MVC 6 应用程序中调试未命中断点
【发布时间】:2017-03-30 10:24:37
【问题描述】:

我正在开发 .NET CORE 1.0 MVC 6 应用程序,我坚持调试点,因为它昨天停止运行。尝试次数后我删除项目并重新开始。第一次加载符号,即使由于我在工具 --> 调试 --> 符号中取消选中,但是它遇到了断点。现在,如果我选择“仅启用我的代码”但在控制器中,它只会点击 C# 类“Startup.cs”。我从下拉列表中有 Debug 选项,不太清楚为什么。在这里需要帮助。

我变了

选择调试->选项->调试->常规

勾选启用 .NET Framework 源代码步进。

还是没有成功

模块

尝试在 Index 和 about 中的 MVC Core 的 Controller home 类中命中

 public class HomeController : Controller
{
    public IActionResult Index()
    {
        var x = 2 + 3;

        return View();
    }

    public IActionResult About()
    {
        var x3 = 2 + 6;
        var xx = "dd";

        ViewData["Message"] = "Your application description page.";

        return View();
    }

调试输出

【问题讨论】:

  • 您是否从“输出”窗口获得任何输出消息?另请检查您的调试模块窗口。为了确保它与您的 VS 设置无关,我建议您在调试应用程序之前重置您的 VS 设置。例如项目属性“优化代码”等会影响调试。
  • 它抱怨符号未加载
  • 它工作正常,直到最近只有当我创建新项目并且它在控制器类中达到断点时才工作,但是一旦应用程序关闭并重新打开它就不会达到调试点,尽管它仍然达到调试点对于startup.cs。
  • 我相信它抱怨符号未加载以进行测试,我创建了 MVC 5 应用程序,在调试期间,调试红色标记变为黄色,给我符号未加载错误消息。
  • 我确实重置了 Visual Studio,但仍然是同样的问题

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


【解决方案1】:

实际上您的屏幕截图不是调试输出,而是构建输出。

如果禁用“仅启用我的代码”,并在 TOOLs->Options->Debugging->Symbols 下启用/禁用 Microsoft 符号服务器,然后在重新打开后调试您的应用程序,结果如何?

如果我创建一个新的应用程序,断点是正常命中的,如果我重新打开解决方案,实际上它仍然可以命中断点,但它很慢。像截图1一样,如果你访问“调试”输出窗口,它会一一列出加载的符号,大约1分钟后,它会像截图2一样命中断点。当然,我在TOOLS下启用了微软符号->Options->Debugging->Symbols 并为上述步骤禁用 Enable Just My Code。

所以对于您的问题,一个可能的原因是它只是缓慢加载符号,请稍等片刻。

【讨论】:

  • 嗨,杰克,在我的场景中,调试不适用于仅一个“LoginController”控制器,但它适用于所有其他控制器。并且输出仅在调试模式下运行。对此有任何想法吗?为什么只有一个控制器不接受调试。注意:无论我更改登录控制器中的任何代码都不会影响,但我已经验证我是否更改了正确路径或文件中的代码。
【解决方案2】:

虽然 Jack Zhai-MSFT 的解决方案有效,但我仍然有一些奇怪的行为:断点部分工作。在这里找到了完美的解决方案:Breakpoint Failed to Bind - Visual Studio 2015 虽然上面的链接加载了大量的解决方案,但在我的情况下,将配置从 Release 更改为 Debug >Build 菜单 Configuration Manager 解决了我所有的断点相关问题。

【讨论】:

  • 我猜断点被设计为在调试模式下工作,在发布模式下它们被跳过以加快进程(但我只是猜测)。
  • 断点和调试模式通过生成特定的汇编指令来工作,这些指令使您的应用程序能够通过断点暂停,当您构建发布时,不会生成这些汇编指令,因此调试器没有任何东西继续,这就是为什么你可以在发布时设置断点,但仍然没有让你的应用程序真正中断。
  • @TrevorHart - 谢谢,很高兴知道它在幕后是如何工作的。
【解决方案3】:

我遇到了同样的问题,上述解决方案都没有奏效。 最后我发现下面的设置就像一个魅力。

转到工具->选项->调试->常规->取消选中“使用托管兼容模式”复选框

【讨论】:

    【解决方案4】:

    通过启用以下调试选项“启用 .Net 框架源步进”为我工作

    【讨论】:

      【解决方案5】:

      我以为我遇到了同样的行为,但在我的情况下,它是由 .NET Core MVC 应用程序的 Startup.cs 类中的时间耦合引起的。

      我在 app.UseMvc() 调用下面包含了我的 app.UseMiddleware() 调用,因此我的中间件组件将初始化但从未受到请求的影响进入我的应用程序。将我的调用移至 app.UseMvc 调用上方的 app.UseMiddleware 调用解决了这个问题,现在我的请求正在通过我的自定义中间件正确路由。

      app.UseMVC 必须是最后一个app.Use()”在 Startup.cs 类的 Configure 方法中调用

      【讨论】:

      【解决方案6】:

      这解决了我的问题 -> 关闭视觉工作室。 -> 删除 .vs 文件夹重新打开 Visual Studio。这样做解决了无法命中断点的问题

      【讨论】:

        猜你喜欢
        • 2010-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-02
        • 1970-01-01
        • 2019-08-16
        • 1970-01-01
        • 2010-11-05
        相关资源
        最近更新 更多