首页 > 解决方案 > 在 VS Code 中调试 C# Azure 函数时出现分段错误

问题描述

使用本地开发一堆 Azure 功能

一切都很好。我能够在本地开发和调试我的 Azure 函数,然后将它们部署到 Azure。但是一天前,我从 升级netcoreapp2.2netcorepp3.1. 这是我现在的settings.json

{
  "azureFunctions.deploySubpath": "bin/Release/netcoreapp3.1/publish",
  "azureFunctions.projectLanguage": "C#",
  "azureFunctions.projectRuntime": "~3",
  "debug.internalConsoleOptions": "neverOpen",
  "azureFunctions.preDeployTask": "publish",
  "azureFunctions.templateFilter": "Verified"
}

现在我仍然可以按 启动本地调试会话F5。但是,当我尝试对localhost:7071API 地址进行 http 请求时,调试器会话会以以下消息终止:

...
[7/30/2020 8:21:32 PM] f4f4622abc054ed29ac69f1210a204a8: Function 'GetScorecardsByActionTargetType (Orchestrator)' completed. ContinuedAsNew: False. IsReplay: False. Output: (332 bytes). State: Completed. HubName: PolTrackTestHubV5. AppName: . SlotName: . ExtensionVersion: 2.2.2. SequenceNumber: 8.
[7/30/2020 8:21:32 PM] Executed 'GetScorecardsByActionTargetType' (Succeeded, Id=11f2a673-851e-4afb-9ed6-81f6e3eefc8d)
Stack overflow.
/d/Users/xxx/AppData/Roaming/npm/func: line 14:  2125 Segmentation fault      node "$basedir/node_modules/azure-functions-core-tools/lib/main.js" "$@"       
The terminal process "C:\Program Files\Git\bin\bash.exe '-c', 'func host start'" terminated with exit code: 139.

关于升级期间发生了什么问题的任何想法(我认为升级是导致它的原因)?

编辑:

我注释掉了我正在开发的新功能(一个编排)。相反,我尝试在调试器中运行升级前曾经工作且我没有更改的旧编排之一。这个旧函数与新函数在同一个本地函数项目中。

这是终端窗口的成绩单:

[7/31/2020 3:30:48 AM] Task hub worker started. Latency: 00:00:02.1744949. InstanceId: . Function: . HubName: PolTrackTestHubV5. AppName: . SlotName: . ExtensionVersion: 2.2.2. SequenceNumber: 1.
[7/31/2020 3:30:48 AM] Host started (2892ms)
[7/31/2020 3:30:48 AM] Job host started
Hosting environment: Production
Content root path: D:\Users\xxx\Documents\VisSources\PolTrackCosmosDbFunctions\bin\Debug\netcoreapp3.1
Now listening on: http://0.0.0.0:7071
Application started. Press Ctrl+C to shut down.
[7/31/2020 3:30:53 AM] Host lock lease acquired by instance ID '000000000000000000000000B1FC0ED8'.
[7/31/2020 3:32:36 AM] Executing HTTP request: {
[7/31/2020 3:32:36 AM]   "requestId": "425ae07f-7bb8-4c54-beb7-d0c1eb43b6ba",
[7/31/2020 3:32:36 AM]   "method": "GET",
[7/31/2020 3:32:36 AM]   "uri": "/api/action-info-docs/get-one/asdfasdfasdfasdf"
[7/31/2020 3:32:36 AM] }
[7/31/2020 3:32:37 AM] Executing 'GetActionInfoDocOrchestration_HttpStart' (Reason='This function was programmatically called via the host APIs.', 
Id=c67317dd-3f7e-4eab-89ef-2d3bfe155597)
[7/31/2020 3:32:37 AM] c3879f9bdd5f4665952b319a48b81eb7: Function 'GetActionInfoDocOrchestration (Orchestrator)' scheduled. Reason: NewInstance. IsReplay: False. State: Scheduled. HubName: PolTrackTestHubV5. AppName: . SlotName: . ExtensionVersion: 2.2.2. SequenceNumber: 2.
[7/31/2020 3:32:59 AM] Started GetActionInfoDocOrchestration orchestration with ID = 'c3879f9bdd5f4665952b319a48b81eb7'.
[7/31/2020 3:32:59 AM] Executing 'GetActionInfoDocOrchestration' (Reason='', Id=7d29ec59-3cf6-467b-8cd3-a0d50d2b8eb4)
[7/31/2020 3:32:59 AM] c3879f9bdd5f4665952b319a48b81eb7: Function 'GetActionInfoDocOrchestration (Orchestrator)' started. IsReplay: False. Input: (72 bytes). State: Started. HubName: PolTrackTestHubV5. AppName: . SlotName: . ExtensionVersion: 2.2.2. SequenceNumber: 3.
[7/31/2020 3:32:59 AM] Running GetActionInfoDocOrchestration.
[7/31/2020 3:32:59 AM] c3879f9bdd5f4665952b319a48b81eb7: Function 'GetActionInfoDocOrchestration (Orchestrator)' completed. ContinuedAsNew: False. 
IsReplay: False. Output: (48 bytes). State: Completed. HubName: PolTrackTestHubV5. AppName: . SlotName: . ExtensionVersion: 2.2.2. SequenceNumber: 
4.
[7/31/2020 3:32:59 AM] Executed 'GetActionInfoDocOrchestration' (Succeeded, Id=7d29ec59-3cf6-467b-8cd3-a0d50d2b8eb4)
Stack overflow.

此时工作线程因Stack Overflow异常而暂停。调用栈包含大量类似这样的异常 在此处输入图像描述

编辑#2 调用堆栈

编辑#3

Http 触发代码(该函数采用一个名为 docuemntId 的字符串参数)

        [FunctionName(THIS_ORCHESTRATION + "_HttpStart")]
        public async Task<HttpResponseMessage> HttpStart(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "action-info-docs/get-one/{documentId}")] HttpRequestMessage req,
            [DurableClient] IDurableOrchestrationClient starter,
            string documentId, ILogger log)
        {
            string instanceId = await starter.StartNewAsync(THIS_ORCHESTRATION, null, documentId);

            log.LogInformation($"Started {THIS_ORCHESTRATION} orchestration with ID = '{instanceId}'.");

            DurableOrchestrationStatus status;
            while (true)
            {
                status = await starter.GetStatusAsync(instanceId);
                if (status.RuntimeStatus == OrchestrationRuntimeStatus.Completed ||
                    status.RuntimeStatus == OrchestrationRuntimeStatus.Failed ||
                    status.RuntimeStatus == OrchestrationRuntimeStatus.Terminated)
                {
                    break;
                }
            }
            return req.CreateResponse(System.Net.HttpStatusCode.OK, status.Output);
        }

编辑#4

如下所示,我更改了我从中调用的编排的 Http 触发器[DurableClient] IDurableOrchestrationClient starter [DurableClient] IDurableClient starter。这个项目中有五个其他的编排我没有改变。

Stack Overflow消息之后,调试会话终止后,我还会收到以下消息: The terminal process "C:\Program Files\Git\bin\bash.exe '-c', 'func host start'" terminated with exit code: 233.

编辑#5

我确实在我的函数项目中将所有六个编排都更改为 to IDurableOrchestrationClientIDurableClient仍然得到同样的错误。

标签: visual-studio-codeazure-functionsvscode-debuggerazure-durable-functionsazure-functions-core-tools

解决方案


您能否将[DurableClient] IDurableOrchestrationClient starter更改为[DurableClient] IDurableClient starter并试一试?


推荐阅读