如何通过launch.json和tasks.json在本地启动Azure函数并动态附加调试器到进程?

10
使用Visual Studio Code在Mac上使用.NET Core,我正在尝试在本地托管Azure Function,并将调试器附加到它。 手动启动函数后,我可以通过按下IDE中的调试按钮来让它正常工作,该按钮运行默认的launch.json文件。这让我选择要附加调试器的进程,因为有一行代码是这样的"processId": "${command:pickProcess}"
我想自动化这个流程,只需单击VSCode中的调试按钮即可触发它。

launch- and tasks.json

在上面的图片中,我尝试通过在调试器附加之前运行一个preLaunchTask来解决这个问题。这个任务应该托管并启动函数-当它与流隔离时,它可以成功地完成。 然而,当我按下上述配置的Debug按钮时,VSCode让我立即选择一个进程,而实际上尚未完成preLaunchTask,因此进程func还不可用。
我的思路正确吗? 为使其正常工作,我可能会错过什么?
3个回答

5
你可以尝试使用Visual Studio Code Functions扩展程序创建本地函数应用程序。当你使用该扩展程序创建函数应用程序时,它会自动将VS Code启动配置添加到你的项目中,至少在我的机器上可以正常工作 :-)。
我和你的配置之间的一个区别是进程ID,你可以将其更改为: "processId": "${command:azureFunctions.pickProcess}"

或者直接删除.vscode文件夹,重新启动Visual Code并允许其重新创建这些文件,使它们看起来像应该的样子。如果您移动文件等操作不当,这些文件很容易混乱。 - Henrik
1
他们也很容易被在VS Code中使用Azure Functions扩展所搞乱。从经验来看,它生成的损坏配置比创建工作配置的次数更多。我得出结论,这不值得,卸载它后,根据文档手动创建配置更快且更可靠。 - Daniel Saner

4

VSCode功能扩展非常好用,但问题在于团队已经开始在Visual Studio Windows上使用这个解决方案,因此我必须适应它。

然而我没有注意到扩展中附带的启动配置中的azureFunctions部分!我把我的launch.json编辑为下面这样:

{
  "name": "Attach to .NET Functions",
  "type": "coreclr",
  "request": "attach",
  "processId": "${command:azureFunctions.pickProcess}"
}

这似乎解决了问题!请注意,现在没有preLaunchTask。然而,主机被启动并且调试器被附加!感谢@MartinBrandl!


不客气!很高兴你能解决它。敬礼 - Martin Brandl

0
之前的解决方案对我来说不起作用。我不得不在主机启动任务的tasks.json中添加以下行:
    "isBackground": true

这样调试器就不会等待主机启动任务完成。

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