Visual Studio 代码调试器未连接到 SAM Local
Posted
技术标签:
【中文标题】Visual Studio 代码调试器未连接到 SAM Local【英文标题】:Visual Studio Code Debugger Not Connecting to SAM Local 【发布时间】:2018-05-04 06:20:32 【问题描述】:根据 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 的。
【问题讨论】:
【参考方案1】:当通过终端或 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"
]
【讨论】:
谢谢吉诺。我能够让它在 WebStorm 中工作,这实际上是我选择的 IDE。虽然,我确实发现它有点命中或错过,因为有时需要多次尝试才能使调试器连接。我实际上最终一起放弃了 SAM Local,但如果我以后需要在 VSC 中再次使用它,我会参考你的笔记。【参考方案2】:要修复此问题并调试 Node SAM Local Lambda 函数,我必须阅读 Node.js 调试文档 (https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_supported-nodelike-runtimes)。
特别是在我这边解决这个问题的部分与“Legacy”与“Inspector”调试协议有关。对于 Node >8.0 Legacy 需要使用调试协议。
由于 Lambda 运行时依赖于 Node 6.10“旧版”协议我必须使用。
起初我不认为这可能是问题,因为 SAM 本地节点 VS 代码配置实际上不正确(至少对我而言)在他们的文档中引用了“Inspector”协议,同时正确引用了“Legacy” " 这些相同文档中的 Gif 协议(见下文)。
对于那些想尝试的人,这是我的 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"
]
【讨论】:
以上是关于Visual Studio 代码调试器未连接到 SAM Local的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 调试期间无法连接到 Oracle 数据库
Flutter 应用程序:IOS 模拟器未连接到 Android Studio
Flutter:未连接到 Android Studio 中的 IOS 模拟器