VSCode 1.20.1不会在任何Node.js v8断点处停止,我做错了什么?

时间:2018-03-06 19:55:25

标签: node.js debugging visual-studio-code

我试图让VSCode 1.20.1在我的项目中断点,但它只是拒绝中断(至少使用检查器协议)。我已将其提炼为3行Node.js示例项目,可以找到here on GitHub,我将粘贴下面的相关部分。

index.js程序是一个简单的Hello World,可以避免任何调试器附加竞争(稍后会详细介绍)。

setTimeout(() => {
    console.log('Hello'); //Breakpoint is set here
}, 5000);

launch.json如下:

{
    // Use IntelliSense to learn about possible 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": "Normal Run",
            "runtimeExecutable": "${workspaceFolder}/bin/node",
            "runtimeArgs": [
                "--nolazy",
                "--inspect-brk=0.0.0.0:5858"
            ],
            "program": "${workspaceFolder}/index.js",
            "args": [],
            "env": {
                "DOCKER_ARGS": "-p5858:5858"
            },
            "address": "127.0.0.1",
            "port": 5858,
            "timeout": 60000,
            "console": "integratedTerminal",
            "smartStep": true,
            "stopOnEntry": false,
            "protocol": "inspector",
            "autoAttachChildProcesses": true,
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "/src"
        }
    ]
}

请注意,Node.js在标准node:8容器中的Docker中运行,并且具有本地源目录的卷装入(这是runTimeExecutable的用途,请参阅GitHub)。如果我使用Wireshark监视端口5858,我可以看到调试器附加并解码所有消息。奇怪的是,VSCode立即发出Runtime.runIfWaitingForDebugger,然后发出似乎被Node.js接受的Debugger.setBreakpointByURL消息(它成功返回断点的位置)。我在代码中有5秒的超时,以防万一这种竞争导致问题(它似乎不是)。

顺便说一句,如果我使用我的主机Node.js(6.11.4),协议为legacy(或auto选择legacy)并注释掉{{ 1}},runtimeArgs等.VSCode命中断点。如果我将协议强制为runtimeExecutable(这在6.11.4中是实验性的)并添加回运行时执行(但不是可执行)调试器附加但没有命中断点,基本上与Docker节点的行为相同:8上方。

我在这里做错了什么?这个问题最初是在一个使用sourcemaps和mocha等的新TypeScript项目中开始的,但我把它归结为此。

0 个答案:

没有答案