Home Articles

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

Asked
Viewed 1028 times
2

根据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的 .

2 Answers

  • 3

    当通过终端或visual studio代码终端运行本地sam时,设置断点并在调试下拉列表中选择 launch.json 的名称,如文档中所示 .

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

    之后,启动sam本地start-api . 然后,当您在API上点击 endpoints 时,您应该看到终端状态如下:

    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

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

    我正在使用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"
          }
       ]
    }
    
  • 0

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

    具体来说,解决这个问题的部分与"Legacy" vs "Inspector"调试协议有关 . 对于Node> 8.0 Legacy 需要使用调试协议 .

    由于Lambda Runtime依赖于Node 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"
            }
        ]
    }
    

    最重要的部分是:“协议”:“遗产”

    我假设您可以将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 that does not work but is referenced in the docs (DO NOT USE THIS ONE)

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

Related