Visual Studio代码 - 节点调试器断点未被命中

时间:2017-10-19 01:18:56

标签: visual-studio-code

我正在尝试使用VSCode来调试我正在运行的节点应用程序。

我在一个单独的终端中启动应用程序,然后使用attach来处理配置以挂钩它。

附件工作正常,我得到一个侧面板,上面写着“加载的脚本”。与我的项目中的文件。如果我点击其中一个并在那里设置断点,它将正常工作。

如果我在通过VSCode编辑器打开的文件上设置断点,断点会变灰,当我将鼠标悬停在它上面时会说“断点设置但尚未绑定”。

如何才能使我在代码上设置的断点绑定?

14 个答案:

答案 0 :(得分:6)

在启动文件中尝试此配置:

{
    "name": "Attach to Process",
    "type": "node",
    "protocol": "inspector",
    "request": "attach",
    "stopOnEntry": false,
    "port": 5858,
    "localRoot": "${workspaceRoot}",
    "remoteRoot": "/somepath/myprojectroot",
    "sourceMaps": true
}

确保remoteRoot是正确的路径,否则它将不知道在哪里查找源文件。

答案 1 :(得分:4)

在VSCode设置上搜索“调试javascript使用预览”,然后将其禁用。现在它应该绑定所有断点。

答案 2 :(得分:4)

我在使用 VSCode 1.52.1 时遇到了这个问题,对我有用的修复方法是:

  1. 通过代码 > 首选项 > 设置禁用 debug.javascript.usePreview

  2. "localRoot": "${workspaceFolder}/" 添加到 launch.json

  3. "remoteRoot": "${workspaceFolder}/" 添加到 launch.json

答案 3 :(得分:3)

显而易见的事实是VSCode 1.20不允许你点击断点。

我也尝试了1.21,它也不允许你这样做。

我回到了1.18,它的效果与预期的一样,没问题。

答案 4 :(得分:2)

我遇到了同样的问题...
在尝试了很多启动配置组合后,我发现了正确的位置。

{
  "type": "node",
  "request": "attach",
  "name": "Attach Program",
  "protocol": "inspector",
  "restart": true,
  "skipFiles": [
    "<node_internals>/**"
  ],
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/",
}

Ps:我使用--inspect参数(允许调试器附加节点)使用nodemon启动节点脚本。

答案 5 :(得分:1)

对我来说,只需将"localRoot": "${workspaceFolder}"添加到默认launch.json配置中就可以了。

{
    "type": "node",
    "request": "launch",
    "name": "Launch Program",
    "program": "${workspaceFolder}/bin/www",
    "localRoot": "${workspaceFolder}"
}

答案 6 :(得分:1)

我参加聚会很晚,但想分享导致我的“未绑定断点”错误的原因。

我有文件A和B。文件A被调用到文件B中(并在文件A的顶部require d)。文件A的断点运行正常。文件B有时会让我打他们,但如果它能正常工作,我将无法获得完整的调试经验。

我终于意识到文件A顶部的require语句的大小写与实际文件夹结构不同。 require正在/path/to/file,应该在/Path/To/File的地方。

我修复了路径框和文件B中的断点,再次开始工作。

答案 7 :(得分:0)

我有一个TypeScript项目,该项目突然不再遇到断点了。就我而言,我必须将项目文件夹移出iCloud Drive文件夹。还有其他指示符指出这条路不通,例如缺少git gutter指示符。这是我的调试启动配置。命中app.ts中的断点。

  {
    "type": "node",
    "request": "launch",
    "name": "Debug",
    "program": "${workspaceFolder}/src/app.ts",
    "sourceMaps": true,
    "protocol": "inspector",
    "cwd": "${workspaceFolder}",
    "outFiles": [
      "${workspaceFolder}/dist/**/*.js"
    ]
  }

答案 8 :(得分:0)

要达到断点,您需要在调试模式下进行编译。 因此,在使用tasks.json编译代码时,请在command属性中启用调试标志。 C ++示例:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Compile Test",
      "type": "shell",
      "command": "g++ -g test.cpp",
      "presentation": {
        "echo": true,
        "reveal": "always",
        "focus": false,
        "panel": "shared",
        "showReuseMessage": true,
        "clear": true
      },
      "group": "build",
    }
  ]
}

我正在谈论-g中的"command": "g++ -g test.cpp",标志

答案 9 :(得分:0)

嗨,我遇到了同样的问题,我通过添加到

来解决了这个问题。
actMsg

我的包含代码的文件夹

"webRoot": "${workspaceFolder}",

完整的launch.json

"webRoot": "${workspaceFolder}/src",

答案 10 :(得分:0)

我正在使用此配置来调试TypeScript项目:

        {
            "name": "Debug API",
            "request": "attach",
            "skipFiles": [
                "<node_internals>/**"
            ],
            "type": "pwa-node",
            "sourceMaps": true,
            "outFiles": [
                "${workspaceFolder}/**/*.js",
                "!**/node_modules/**"
            ]
        },

outFiles完成了技巧并限制了我的断点(VS代码1.51.1)。

答案 11 :(得分:0)

您应该检查的第一件事是入口点 - 执行的第一行代码。如果该断点可以绑定断点,那么您就知道其他断点未绑定,因为在遇到其他断点之间的某些时间被引入的错误抢占了。在这种情况下,您的代码无法访问,IDE 可以检测到您的模块根本没有加载。

答案 12 :(得分:0)

我正在使用 VSCode 调试器运行 Docker Compose,在我的情况下,即使在尝试了上述解决方案之后,我设置的一些断点显示为无界,有些则显示为有界。

似乎无界的在函数之外(例如在 require 或变量初始化语句上)。

我只能假设这是因为调试器附加在 docker 容器启动后运行(因此这些断点无法访问)。

答案 13 :(得分:0)

@alkasai 有正确答案。

但是,将哪个源代码文件夹添加到您的工作区也很重要。我的存储库结构是这样的:C:\git\parent_folder\child_folder\src

我的断点不起作用,只要“parent_folder”是添加到我的工作区的文件夹并且我的“webRoot”条目如下所示:

"webRoot": "${workspaceRoot}",

但是,如果我将 '/child_folder' 添加到 'webRoot'(例如“webRoot”:“${workspaceRoot}/child_folder”),断点就起作用了。

但是,如果我从 VS Code 工作区中删除了“parent_folder”,而是将“child_folder”添加到了工作区(从而更改了“${workspaceRoot}”变量值的基础值),则原始条目(没有'/child_folder' 子文件夹引用)导致断点被激活。