【问题标题】:Cant hit breakpoint in web api controller无法在 Web api 控制器中命中断点
【发布时间】:2017-01-21 15:05:25
【问题描述】:

当我尝试调试这段代码时:

 // POST: api/Events
    [HttpPost]
    public async Task<IActionResult> PostEvent([FromBody] object savedEvent)
    {

        Event addedEvent = JsonConvert.DeserializeObject<Event>(savedEvent.ToString());

        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

不能打到这条线:

   Event addedEvent = JsonConvert.DeserializeObject<Event>(savedEvent.ToString());

调试器的反应就像我点击继续但过去的代码没有执行。我真的很困惑。感谢您的帮助。

【问题讨论】:

    标签: c# visual-studio-2015 asp.net-web-api2 asp.net-core-mvc


    【解决方案1】:

    你可以尝试几件事

    1) 确保您在调试模式下运行(而不是发布版)

    2) 确保您正在运行最新的代码并加载了所有符号(将鼠标悬停在断点上可以为您提供有关其禁用原因的额外信息)

    【讨论】:

    • 我忘了提。我处于调试模式并加载了符号。
    • 代码没有问题,所以它应该命中。您可以尝试停止重新启动应用程序,也可以在应用程序中遇到任何其他断点吗?
    • 这很奇怪。我可以建议的最后一件事是,从 Bin 文件夹中删除所有内容,重新构建应用程序并再次运行它
    • 这为我节省了很多时间.. Thnx!
    • 感谢@LarsHoldgaard,虽然无关紧要,但我认为几年前我们已经在您的 Jarboo 项目上共同完成了一些工作,很高兴再次见到您!
    【解决方案2】:

    尝试删除操作的异步部分。这不是一个永久的解决方案,但它可能会帮助您进行调试。我建议的另一件事是在您的操作中围绕代码进行尝试。有可能您的反序列化失败并抛出异常,无论出于何种原因,调试器都没有捕捉到。

    // POST: api/Events
    [HttpPost]
    public ActionResult PostEvent([FromBody] object savedEvent)
    {
    
        Event addedEvent = JsonConvert.DeserializeObject<Event>(savedEvent.ToString());
    
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
    

    【讨论】:

    • 删除异步有帮助。它在 Newthonsoft 库中引发了异常。现在我看到调试异步方法可能变得有点棘手。谢谢!
    【解决方案3】:

    您可能正在“发布”模式而不是“调试”模式下运行您的应用程序。

    您不能在“发布模式”中设置断点(大多数情况下)。

    符号 (.pdb) 文件中有什么内容?符号文件的确切内容 会因语言和编译器而异 设置,但在非常高的水平上,它们是如何记录 编译器将您的源代码转换为处理器的机器代码 执行。

    来源:https://blogs.msdn.microsoft.com/devops/2015/01/05/understanding-symbol-files-and-visual-studios-symbol-settings/

    【讨论】:

      【解决方案4】:

      试试怎么样:

      System.Diagnostics.Debugger.Launch(); 
      

      启动调试器并将其附加到进程。 至少要确保你能进去。

      【讨论】:

        【解决方案5】:

        我发现有时清理和重建有助于处理易碎断点。如果这没有帮助,重新启动 Visual Studio 也有帮助(尤其是在 2015 年,至少根据我的经验)。

        除此之外,我还遇到了内存泄漏问题,导致我的应用程序只能进入到我的代码的某些部分,尽管这通常伴随着应用程序崩溃。

        你没有提到任何错误或崩溃发生,只是代码没有执行,所以我不确定内存泄漏是否会导致你的问题。

        【讨论】:

          【解决方案6】:

          哇,我终于解决了。在我的情况下,它在 DI 中错误地注册了服务,例如:

          services.AddScoped<AccountService>();  << 'Fixed my problem'
          services.AddScoped<NI.JwtBearerAuth.IAccountService, AccountService>(); << 'Confused me, thought I had already registered it, but as you see, this is other implementation'
          

          之后,我能够在控制器中命中断点。所以,我的控制器没有因为这项服务而注册。

          【讨论】:

            猜你喜欢
            • 2018-10-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-27
            • 1970-01-01
            • 2019-05-26
            相关资源
            最近更新 更多