VS Code 调试端口不匹配

t.j*_*.j. 6 windows debugging node.js visual-studio-code

细节

在Win10中。VS Code、帮助、关于...

[窗口标题]
Visual Studio Code

[内容]
版本 1.14.2
提交 cb82febafda0c8c199b9201ad274e25d9a76874e
日期 2017-07-19T23:34:09.706Z
Shell 1.6.6
渲染器 56.0.2924.87
节点 7.4.0

生成launch.json并根据我的runtime...设置进行调整

{
    // Use IntelliSense to learn about possible Node.js debug attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "cwd": "${workspaceRoot}",
            "runtimeExecutable": "npm.cmd",
            "runtimeArgs": [
                "run", "functional-test"
            ],
            "skipFiles": [
                "<node_internals>/**/*.js"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

上面引用的 Npm 脚本...

"functional-test": "node test/functional/run-foo-tests",
Run Code Online (Sandbox Code Playgroud)

第一次尝试

然后我启动一个调试会话 (F5),然后在调试控制台中生成...

使用检查器协议进行调试,因为设置了运行时可执行文件。
npm.cmd --inspect=32825 --debug-brk 运行功能测试

请注意我的 package.json 或 launch.json 中未指定的其他标志。

除了上面的消息之外,IDE 中还显示一个弹出窗口,引用连接超时错误...

无法连接到运行时进程,10000 毫秒后超时 - (原因:无法连接到目标:连接 ECONNREFUSED

第二次尝试

如果我按如下方式更改 npm 脚本(包括--inspect标志)...

"functional-test": "node --inspect test/functional/run-foo-tests",
Run Code Online (Sandbox Code Playgroud)

调试控制台指出...

使用检查器协议进行调试,因为设置了运行时可执行文件。
npm.cmd --inspect=17976 --debug-brk 运行功能测试
调试器侦听端口 9229。
警告:这是一项实验性功能,可能随时更改。

注意不同的端口设置。至少调试器正在启动并给我一个端口来尝试和定位。

它从哪里获得这些值?如何使它们匹配(无需手动编辑 launch.json 和 npm 脚本来为两者分配相同的端口)?

它从未成功加载,而是在顶部显示弹出消息(如上所述。)

第三次尝试

如果我编辑 npm 脚本来添加端口...

"functional-test": "node --inspect=9229 test/functional/run-foo-tests",
Run Code Online (Sandbox Code Playgroud)

并编辑 launch.json 的port设置以匹配...

"configurations": [
    {
        "type": "node",
        "request": "launch",
        "name": "Launch Program",
        "cwd": "${workspaceRoot}",
        "runtimeExecutable": "npm.cmd",
        "runtimeArgs": [
            "run", "functional-test"
        ],
        "port": 9229,
        "skipFiles": [
            "<node_internals>/**/*.js"
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

然后,我在调试控制台中收到以下消息......

使用检查器协议进行调试,因为设置了运行时可执行文件。
npm.cmd 运行功能测试
调试器侦听端口 5858。
警告:这是一项实验性功能,可能随时更改。
{预期的控制台输出...}

然后它将正常工作(据我所知!)请注意,现在调试控制台的第二行(回显/记录运行的命令)现在与设置匹配launch.json runtimeArgs(在第一次和第二次尝试中没有匹配。)

除了反复试验、敲碎头骨的蛮力之外,人们还应该如何解决这个问题(当然肯定有更好的方法?)

第四次尝试

node ...尝试为 npm 脚本调用(显然与npm 脚本中的调用不同)和port配置参数设置端口,但如第一个示例所示,它失败了。

"runtimeArgs": [
    "run", "functional-test", "--inspect=5858"
],
"port": 5858,
Run Code Online (Sandbox Code Playgroud)

第五次尝试

当然,当我写这篇文章时,我终于通过谷歌找到了类似的答案......

"scripts": {
    "debug": "node --nolazy --debug-brk=5858 myProgram.js"
},
Run Code Online (Sandbox Code Playgroud)

调整我的脚本以匹配产量(在调试控制台中)...

使用检查器协议进行调试,因为设置了运行时可执行文件。
npm.cmd 运行功能测试
(节点:12420) DeprecationWarning:node --debug 已弃用。请改用node --inspect。
调试器监听 127.0.0.1:5858

我还在顶部显示了一个不同的弹出窗口......

无法连接到运行时进程,10000 毫秒后超时 - (原因:无法连接到目标:解析错误)。

第六次尝试

如果我更改脚本以匹配调试控制台中的信息...

"functional-test": "node --nolazy --inspect test/functional/run-foo-tests",
Run Code Online (Sandbox Code Playgroud)

调试控制台说...

使用检查器协议进行调试,因为设置了运行时可执行文件。
npm.cmd 运行功能测试
调试器侦听端口 9229。
警告:这是一项实验性功能,可能随时更改。

弹出窗口是...

无法连接到运行时进程,10000 毫秒后超时 - (原因:无法连接到目标:连接 ECONNREFUSED 127.0.0.1