在Azure Function中无法命中断点

9
我正在学习如何使用Azure Functions处理并响应通过Twilio电话号码提交的短信消息。这是使用Microsoft.Azure.WebJobs.Extensions.Twilio(3.0.0-beta5)的预览v2版本。
我使用ngrok来将来自Twilio的http触发器转发到本地服务器,当我从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 Function 调用时调试器介入呢?我需要传递一些设置到VS2017启动的本地服务器中,以便托管/运行 Azure Function吗?
更新
我能够使 VS 调试器停止在断点上,但只有手动将 VS 附加到运行本地 Azure Function 服务器的控制台应用程序后才行。
因此,在配置或工具方面出了问题,因为当你按 F5 时,无论 VS 调试器附加到什么,它都不是正确的应用程序。
我没有将此提交为答案,因为它并不是。我不应该手动重新附加调试器。
以下是我用来使调试器开始正常工作的步骤:
1) 以调试模式通过F5启动Azure Function应用程序。Azure Function 主机的控制台窗口会打开。
2) Debug -> Stop Debugging。#1 中打开的控制台窗口关闭,然后出现一个新的运行 Azure Function 主机的控制台窗口。
3) 将 VS 调试器附加到#2中打开的控制台应用程序(在我的情况下称为“func.exe”)。
调试现在像你期望的那样工作了。
附加信息:我在 VS 中使用 ConEMU 作为我的默认控制台 shell。我不知道它是否有什么意义,但是#1 中打开的控制台是一个 ConEMU shell,而#2 中打开的控制台则是一个普通的 cmd.exe shell。

你的代码运行良好,似乎与Azure函数或ngrok无关,请查看此链接以获取帮助。 - Jerry Liu
这个问题将通过使用版本为16.7的Visual Studio 2019来解决。这个问题已经在我的本地机器上解决了。谢谢! - Ritesh Rai
2个回答

20

我没有安装ConEMU,但我遇到了同样的问题——函数断点突然停止工作。此外,函数运行时控制台在我停止进程时没有关闭,而之前是这样的。我在Visual Studio中运行。

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


1
这对我也起作用了。这只是在最近一周左右才开始发生的。 - rbedger
非常感谢!似乎是VS Azure Emu调试工具中的一个bug,但这个解决方案对我很有帮助。 - Johan Lindberg

3
在这种情况下,ConEMU接管窗口打开默认控制台窗口的方式似乎存在问题(您可以在https://conemu.github.io/en/DefaultTerminal.html中了解有关ConEMU此功能的信息)。
禁用此ConEMU功能 - 允许VS打开普通Windows控制台 - 解决了该问题。断点会像往常一样被触发,而无需手动附加到运行Azure Functions本地主机的控制台。当然,这意味着我失去了ConEMU shell在VS中打开的价值,但我可以接受。我将向ConEMU团队报告此问题。

你如何禁用ConEMU功能? - ZAD
对不起,我不知道。几个月前我停止使用ConEMU了。 - Mark Olbert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接