Visual Studio Code调试器无法连接到SAM本地环境

5
根据AWS文档,我要这样启动SAM本地服务:
$ sam local start-api -d 5858

我在我的launch.json中有以下内容:
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach to SAM Local",
            "type": "node",
            "request": "attach",
            "address": "localhost",
            "port": 5858,
            "localRoot": "${workspaceRoot}",
            "remoteRoot": "/var/task"
        }
    ]
}

但是,当我启动Visual Studio调试器时,它显示“无法连接到运行时,请确保运行时处于'Legacy'调试模式”。 看起来很多人在使用Node.js 6和Visual Studio Code时都会出现这个问题,但是我似乎找不到答案... 我正在使用Visual Studio Code的1.18.1版本。 我尝试在launch.json配置中添加“protocol”:“legacy”。我也尝试过使用--debug-port而不是-d。 我在Windows 10上。不确定问题是否特定于Windows。

你试过 aws-sam-vscode 吗(https://github.com/eduardolucioac/aws-sam-vscode)❓❤️ - undefined
2个回答

4
在终端或Visual Studio Code的终端中运行sam local时,请设置断点并在调试下拉菜单中选择您的launch.json名称,如文档所示。

https://github.com/awslabs/aws-sam-local#debugging-applications

在此之后,启动sam local start-api。然后当您访问API的端点时,您应该在终端上看到类似以下内容的状态:
2018/01/12 07:17:29 Invoking index.handler (nodejs6.10) 2018/01/12 07:17:29 Mounting /Users/24g/1725_ecpo_lambda as /var/task:ro inside runtime container Debugger listening on [::]:8000
一旦您看到调试器正在侦听,请单击调试器上的播放按钮。我注意到这通常不会自动捕获,除非有异常情况。
我正在使用Visual Studio Code的版本1.19.1。
您是否尝试过使用不同的端口?这是我的当前配置:
{
  "version": "0.2.0",
     "configurations": [
      {
        "name": "Attach to SAM Local",
        "type": "node",
        "request": "attach",
        "address": "localhost",
        "port": 8000,
        "localRoot": "${workspaceRoot}",
        "remoteRoot": "/var/task"
      }
   ]
}

谢谢Gino。我已经成功在WebStorm中实现了它,这实际上是我首选的IDE。虽然有时可能需要多次尝试才能使调试器连接成功。我最终放弃了SAM Local,但如果将来需要再次使用VSC,则会参考您的笔记。 - Neil Girardi

3
为了解决这个问题并调试 Node SAM 本地 Lambda 函数,我不得不阅读 Node.js 调试文档(https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_supported-nodelike-runtimes)。具体来说,解决我这边的问题与“传统”和“检查器”调试协议有关。对于 Node >8.0,需要使用“传统”调试协议。由于 Lambda 运行时依赖于 Node 6.10,在我的端上必须使用“传统”协议。起初,我认为这不可能是问题所在,因为 SAM 本地节点 VS Code 配置在他们的文档中实际上引用了“检查器”协议(至少对我来说是如此),而在同一文档的 Gif 中正确引用了“传统”协议。

VS Code needs "Legacy" node debug protocol to work with AWS SAM Local

对于那些想要尝试的人,这是我的有效 launch.json 需要看起来像什么。
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach to SAM Local",
            "type": "node",
            "request": "attach",
            "address": "127.0.0.1",
            "port": 8000,
            "localRoot": "${workspaceRoot}/dist",
            "remoteRoot": "/var/task",
            "protocol": "legacy"
        }
    ]
}

最重要的部分是:"protocol": "legacy" 我认为你可以将127.0.0.1换成localhost,将端口改回5858(而不是8000),因为这些都是我尝试寻找解决方案的碎片,但我还没有尝试过。
我将在github上的AWS SAM Local README.md提交一个pull请求(在此处找到:https://github.com/awslabs/aws-sam-local#debugging-applications),一旦我有时间。希望这能在过渡期间帮助其他人!
与文档相比,本文档仍将以下JSON列为VS Code launch.json文件的正确设置,但它是错误的且不起作用:
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach to SAM Local",
            "type": "node",
            "request": "attach",
            "address": "localhost",
            "port": 5858,
            "localRoot": "${workspaceRoot}",
            "remoteRoot": "/var/task",
            "protocol": "inspector"
        }
    ]
}

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