Отладчик кода Visual Studio не подключается к SAM Local

Согласно документации 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, но я не могу найти ответ... Я использую версию 1.18.1 Visual Studio Code.

Я попытался добавить «протокол»: «Legacy» в конфигурацию launch.json. Я также пытался использовать --debug-port вместо -d. У меня Windows 10. Не уверен, что проблема связана с Windows.


person Neil Girardi    schedule 20.11.2017    source источник


Ответы (2)


При запуске sam local либо через терминал, либо через терминал кода Visual Studio установите точки останова и выберите имя вашего launch.json в раскрывающемся списке отладки, как показано в документации.

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

После этого запускаем сам локальный start-api. Затем, когда вы нажмете конечную точку в API, вы должны увидеть состояние терминала примерно так:

12.01.2018, 07:17:29 Вызов index.handler (nodejs6.10)

12.01.2018 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"
      }
   ]
}
person Gino J    schedule 12.01.2018
comment
Спасибо Джино. Я смог заставить его работать в WebStorm, который на самом деле является моей предпочтительной IDE. Хотя я обнаружил, что это было немного удачно, потому что иногда требовалось несколько попыток, чтобы подключить отладчик. На самом деле я полностью отказался от SAM Local, но я буду обращаться к вашим заметкам в будущем, если мне нужно будет снова использовать его с VSC. - person Neil Girardi; 12.01.2018

Чтобы исправить это и отладить функции Node SAM Local Lambda, мне пришлось прочитать документацию по отладке Node.js (https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_supported-nodelike-runtimes).

В частности, та часть, которая решила эту проблему на моей стороне, связана с протоколами отладки «Наследие» и «Инспектор». Для Node >8.0 необходимо использовать устаревший протокол отладки.

Поскольку Lambda Runtime использует Node 6.10, с моей стороны пришлось использовать устаревший протокол.

Сначала я не думал, что это может быть проблемой, поскольку конфигурация SAM Local node VS Code на самом деле неправильно (по крайней мере, для меня) ссылается на протокол «Инспектор» в своих документах, в то время как правильно ссылается на протокол «Устаревший» в Gif (см. ниже) внутри тех же документов.

VS Code требуется устаревший протокол отладки узла для работы с 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"
        }
    ]
}

Самая важная часть этого: "протокол": "устаревший"

Я предполагаю, что вы можете поменять местами 127.0.0.1 обратно на localhost и перенести обратно на 5858 (а не на 8000), поскольку все это фрагменты моих разнообразных попыток найти решение, но я еще не пробовал.

Я отправлю запрос на вытягивание в AWS SAM Local README.md на github (здесь: 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"
        }
    ]
}
person Necevil    schedule 12.03.2018