Visual Studio代码调试程序未连接到SAM本地

时间:2017-11-20 22:17:30

标签: debugging visual-studio-code aws-sam-cli

根据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版本

我尝试添加"协议":" Legacy" to launch.json config。我也尝试使用--debug-port而不是-d。 我在Windows 10上。不确定问题是否是特定于Windows的。

2 个答案:

答案 0 :(得分:3)

当通过终端或visual studio代码终端运行本地sam时,设置断点并在调试下拉列表中选择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 Mounting / Users / 24g / 1725_ecpo_lambda as   / var / task:ro在运行时容器内调试器监听[::]:8000

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

我正在使用Visual Studio代码的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"
      }
   ]
}

答案 1 :(得分:1)

要修复此问题并调试节点SAM本地Lambda函数,我必须阅读Node.js调试文档(https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_supported-nodelike-runtimes)。

具体来说,解决这个问题的部分与我的一方有关,而且#34; Legacy" vs" Inspector"调试协议。对于Node> 8.0 Legacy 需要使用调试协议。

  

由于Lambda Runtime依赖节点6.10 " Legacy"我必须使用协议

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

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

  

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

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

INCORRECT 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"
        }
    ]
}