首页 > 解决方案 > Azure 函数中未命中断点

问题描述

我正在学习如何使用 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 函数服务器的控制台应用程序之后,该服务器会在您按 F5 时启动。

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

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

以下是我用来让调试器以应有的方式开始工作的步骤:

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

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

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

调试现在可以按您的预期工作。

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

标签: twilioazure-functionsconemu

解决方案


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

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


推荐阅读