visual-studio-code - 在 VS Code 中调试 C# Azure 函数时出现分段错误
问题描述
使用本地开发一堆 Azure 功能
- Windows 10 64 位
- 视觉工作室代码
- C#/.NET 核心
一切都很好。我能够在本地开发和调试我的 Azure 函数,然后将它们部署到 Azure。但是一天前,我从 升级netcoreapp2.2
到netcorepp3.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:7071
API 地址进行 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
异常而暂停。调用栈包含大量类似这样的异常
编辑#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 IDurableOrchestrationClient
。IDurableClient
仍然得到同样的错误。
解决方案
您能否将[DurableClient] IDurableOrchestrationClient starter更改为[DurableClient] IDurableClient starter并试一试?
推荐阅读
- azure - IdentityServer MVC 在 Azure 中托管时抛出 OpenIdConnectProtocolException
- vim - 在 vim 搜索突出显示中保持语法颜色前景
- python - 将一项附加到多个列表 Python
- angular - 主域和子域.htaccess 中的不同角度应用程序刷新失败
- c# - 如何编译我的 C# 库,它使用外部依赖项而不将它们包含在库中?
- javascript - RxJs 简化了重复的 pluck + flatMap
- python - 我能知道为什么吗?返回值 5 并将其分配给变量 x,然后打印。第 4 行和第 5 行从不执行
- coq - LF 系列的评分脚本如何用于手动评分练习?
- python - 更快地解决循环和字典问题
- multithreading - 使用 reactx、kotlin-coroutines、akka-actors 等框架进行编程的权衡?