Azure 函数中未命中断点

Breakpoints Not Hit in Azure Function

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

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

我使用的代码非常简单,只需返回一条文本消息以响应它收到的任何内容:

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 启动的本地服务器 host/run Azure Function?

更新

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

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

我不会提交这个作为答案,因为它不是。我不应该手动重新连接调试器。

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

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

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

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

调试现在如您所愿。

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

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

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

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

解决方案相当不直观:转到 "Tools -> Options -> Debugging" 并 取消选中 "Automatically close the console when debugging stops"。之后断点再次开始工作,即使 window 仍然没有自动关闭。