【问题标题】:Breakpoints Not Hit in Azure FunctionAzure 函数中未命中断点
【发布时间】:2018-07-02 02:41:04
【问题描述】:

我正在学习如何使用 Azure Functions 处理和响应通过 Twilio 电话号码提交的 SMS 消息。这是使用 Microsoft.Azure.WebJobs.Extensions.Twilio (3.0.0-beta5) 的预览版 v2。

我使用 ngrok 将一个 http 触发器从 Twilio 转发到本地服务器,当我在 Visual Studio (2017) 中以调试模式启动 Azure 函数时,本地服务器就会启动。

我使用的代码非常简单,只是返回一条短信来响应它收到的任何内容:

public static class Function1
{
    [ FunctionName( "BikeSMS" ) ]
    public static IActionResult Run(
        [ HttpTrigger( AuthorizationLevel.Function, "get", "post", Route = null ) ]
        HttpRequest req,
        TraceWriter log
    )
    {
        log.Info( "C# HTTP trigger function processed a request." );

        var twiResp = new MessagingResponse();
        twiResp.Append( new Message( "This is Muddlehead. Thanx for your message" ) );

        return new ContentResult()
        {
            Content = twiResp.ToString(),
            ContentType = "application/xml"
        };
    }
}

这很好用。我的问题是我无法让调试器中断函数中的任何内容;断点被忽略,并返回指定的文本。

如何配置,以便在调用 Azure 函数时,调试器参与进来?是否需要将某些设置传递给 VS 2017 启动的本地服务器以托管/运行 Azure 函数?

更新

我能够让 VS 调试器在断点处停止,但只有在手动将 VS 附加到运行本地 Azure Function 服务器的控制台应用程序之后,该服务器会在您按 F5 时启动。

所以配置或工具有问题,因为当您按下 F5 时,无论 VS 调试器附加到什么,它都不是正确的应用程序。

我没有提交这个作为答案,因为它不是。我不必手动重新附加调试器。

以下是我用来让调试器开始正常工作的步骤:

1) 在调试模式下通过 F5 启动 Azure Function 应用程序。为 Azure Function 主机打开控制台窗口。

2) 调试 -> 停止调试。 #1 中打开的控制台窗口关闭,并出现一个运行 Azure Function 主机的新控制台窗口。

3) 将 VS 调试器附加到在 #2 中打开的控制台应用程序(在我的例子中称为“func.exe”)。

现在可以按预期进行调试了。

附加信息:我在 VS 中使用 ConEMU 作为我的默认控制台 shell。我不知道这是否意味着什么,但在 #1 中打开的控制台是一个 ConEMU shell,但在 #2 中打开的控制台是一个普通的旧 cmd.exe shell。

【问题讨论】:

  • 您的代码有效,因此它似乎与 Azure 函数或 ngrok 无关,请查看 this 是否有帮助。
  • 此问题将通过使用 Visual Studio 2019 版本 16.7 解决。这是在我的本地机器上解决的问题。谢谢!

标签: twilio azure-functions conemu


【解决方案1】:

我没有 ConEMU,但我遇到了同样的问题 - 函数断点刚刚停止工作。此外,当我停止进程时,函数运行时控制台并没有关闭,它之前已经关闭了。在 Visual Studio 中运行。

解决方案相当不直观:转到“工具 -> 选项 -> 调试”并取消选中“调试停止时自动关闭控制台”。之后,即使窗口仍然没有自动关闭,断点也会重新开始工作。

【讨论】:

  • 这对我也有用。这仅在上周左右开始发生
  • 非常感谢!似乎是 VS azure emu 调试工具中的一个错误,但这为我解决了。
【解决方案2】:

在这种情况下,ConEMU 如何接管默认控制台窗口的打开显然存在问题(您可以在https://conemu.github.io/en/DefaultTerminal.html 阅读有关 ConEMU 的此功能的信息)。

禁用这个 ConEMU 功能——让 VS 打开一个普通的 Windows 控制台——解决了这个问题;断点正常命中,无需手动附加到运行 Azure Functions 本地主机的控制台。当然,这意味着我失去了在 VS 中打开 ConEMU shell 的价值,但我可以忍受。我会将问题报告给 ConEMU 团队。

【讨论】:

  • 如何禁用 ConEMU 功能?
  • 对不起,我不知道。几个月前我停止使用 ConEMU。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 2014-04-26
  • 2011-12-01
  • 2010-10-13
  • 2019-03-29
  • 2019-10-02
相关资源
最近更新 更多