AWS Serverless 如何使用 "sam local start-api" 调试 .net core 3.1 应用程序

AWS Serverless how to use "sam local start-api" to debug .net core 3.1 applications

我想在本地启动无服务器应用程序,然后使用 Visual Studio 对其进行调试。我看到命令行参数 --debug-port、--debugger-path、--debug-args 和 --debug-function,但没有关于这些如何用于 .net 核心的示例。

这就是我用于 Visual Studio 代码的内容。我正在 Windows 使用 dotnetcore3.1。

首先,我必须下载 Linux vsdbg 调试文件(是的,Linux,因为这些文件将安装在 SAM docker容器)

https://vsdebugger.azureedge.net/vsdbg-17-0-10712-2/vsdbg-linux-x64.tar.gz

将它们解压缩到一个文件夹中,例如C:\vsdbg

我有一个启动 SAM 的任务。我的 tasks.json 看起来像:

{  
    "version": "2.0.0",  
    "tasks": [{
        "label": "sam local api",
        "type": "shell",
        "command": "sam",
        "args": [
            "local",
            "start-api",
            "-d", "5858",
            "--template", "${workspaceFolder}/template.yaml",
            "--debugger-path", "C:\vsdbg",
            "--warm-containers", "EAGER"
        ],
    }]  
}  

重要提示:

** --debugger-path 指向 linux 调试文件文件夹。 sam cli 将为您装载文件。

** 我必须使用 --warm-containers EAGER 来防止容器在每次请求后关闭

launch.json 看起来像这样:

{
    "name": "sam local api attach",
    "type": "coreclr",
    "processName": "dotnet",
    "request": "attach",
    "pipeTransport": {
        "pipeCwd": "${workspaceFolder}",
        "pipeProgram": "powershell",
        "pipeArgs": [
            "-c",
            "docker exec -i $(docker ps -q -f publish=5858) ${debuggerCommand}"
        ],
        "debuggerPath": "/tmp/lambci_debug_files/vsdbg",
        "quoteArgs": false
    },
    "sourceFileMap": {
        "/var/task": "${workspaceFolder}"
    }
},

这一位:$(docker ps -q -f publish=5858) 通过在您正在使用的端口上进行过滤来获取您的 docker 容器的 ID。

这花了很多时间才开始工作,我很惊讶它并不容易,或者至少有一些像样的文档。