3

根据 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 调试器时,它说“无法连接到运行时确保运行时处于‘旧版’调试模式”

看起来好像很多人都对 Node.js 6 和 Visual Studio Code 有这个问题,但我似乎找不到答案……我使用的是 Visual Studio Code 1.18.1 版

我尝试将 "protocol": "Legacy" 添加到 launch.json 配置。我也尝试过使用--debug-port 而不是-d。我在 Windows 10 上。不确定问题是否特定于 Windows。

4

2 回答 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 调用 index.handler (nodejs6.10)

2018/01/12 07:17:29 在运行时容器中安装 /Users/24g/1725_ecpo_lambda 作为 /var/task:ro 调试器监听 [::]:8000

一旦你看到调试器正在监听。单击调试器上的播放按钮。我注意到这通常不会自行恢复,除非我相信有例外。

我正在使用 1.19.1 版的 Visual Studio 代码。

您是否尝试过使用不同的端口?这是我目前的配置:

{
  "version": "0.2.0",
     "configurations": [
      {
        "name": "Attach to SAM Local",
        "type": "node",
        "request": "attach",
        "address": "localhost",
        "port": 8000,
        "localRoot": "${workspaceRoot}",
        "remoteRoot": "/var/task"
      }
   ]
}
于 2018-01-12T12:36:33.967 回答
3

为了解决这个问题并调试 Node SAM Local Lambda 函数,我必须阅读 Node.js 调试文档(https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_supported-nodelike-runtimes)。

特别是在我这边解决这个问题的部分与“Legacy”与“Inspector”调试协议相关。对于 Node >8.0 Legacy Debug 协议,需要使用。

由于 Lambda 运行时依赖于节点 6.10 ,因此我必须使用“旧版”协议。

起初我不认为这可能是问题,因为 SAM 本地节点 VS 代码配置实际上不正确(至少对我而言)在他们的文档中引用了“Inspector”协议,同时正确地引用了“Legacy”协议这些相同文档中的 Gif(见下文)。

VS 代码需求

对于那些想尝试的人,这就是我的WORKING 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 提交拉取请求(可在此处找到:https ://github.com/awslabs/aws-sam-local#debugging-applications )。希望这可以在此期间帮助其他人!

将上述内容与截至本文发布时仍将以下 JSON 列为 VS Code launch.json 文件的正确设置的文档进行比较:

不正确的 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"
        }
    ]
}
于 2018-03-12T01:12:11.233 回答