VS Code未验证的断点

时间:2018-06-11 18:53:50

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

我试图在VS Code(v.1.24.0)中调试Node / Express TypeScript应用程序,并且在调试期间我的所有断点都显示为灰色。

错误是"未验证的断点,断点已设置但尚未绑定。"我已经搜索了但无法弄清楚我的配置有什么问题。控制台中没有错误,调试器在我选择进程时成功附加,但断点不起作用。

如何调试?

基本文件夹结构:

/.vscode
/src/server.ts
/dist/server.js
launch.json
tsconfig.json

launch.json

{
            "type": "node",
            "request": "attach",
            "name": "Attach by Process ID",
            "processId": "${command:PickProcess}",
            "protocol": "inspector",
            "address": "localhost",
            "port": 8080,
            "restart": true,
            "preLaunchTask": "npm: build",
            "sourceMaps": true,
            "outFiles" : [ "${workspaceFolder}/dist/**/*.js" ]
        },

tsconfig.json

{
  "compilerOptions": {
    "alwaysStrict": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "target": "es6",
    "outDir": "dist",
    "rootDir": "src",
    "sourceMap": true,
    "typeRoots": [ "node_modules/@types" ]
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}

tasks.json

"version": "2.0.0",
    "tasks": [
        {
            "type": "npm",
            "script": "build",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        } ]

6 个答案:

答案 0 :(得分:5)

对于遇到此错误的任何人,我都能找到解决方案。问题是我启动Node进程的方式,而不是源映射的映射(产生不同的错误)。

要附加到进程,我从VS Code终端启动它,如下所示:

node --inspect dist/server.js

launch.json:

{
            "type": "node",
            "request": "attach",
            "name": "Attach by Process ID",
            "processId": "${command:PickProcess}",
            "protocol": "inspector",
            "address": "localhost",
            "port": 8080,
            "restart": true,
            "preLaunchTask": "npm: build",
            "sourceMaps": true,
            "outFiles" : [ "${workspaceRoot}/dist/**/*.js" ]
        },

答案 1 :(得分:0)

我今天遇到了这个问题,我尝试重新构建并重新运行调试器。我关闭了所有VS Code实例,然后重新启动,现在可以正常工作。

答案 2 :(得分:0)

我发现我试图在一个文件中设置的所有断点都出现了此问题,但其余问题都没有。

我用小写字母命名了dispatcher.js文件,但使用以下命令将其拉入节点:

const { Dispatcher } = require('./Dispatcher')

,内容是一个javascript类,导出为:

module.exports = { Dispatcher }

答案 3 :(得分:0)

我在使用vscode 1.25时遇到了这个问题

看起来像是在调试会话运行时更改了包含断点的源(.ts)时触发的。可以通过重新保存源代码或重新切换断点来重新启用断点。

但是如果更改了源,则必须重新启动调试才能与源同步。

此问题似乎也蔓延到“编辑”模式,即使退出“调试”模式,断点仍将保持“未验证”状态。同样,在这种情况下,重新保存源似乎可以重新启用断点。

答案 4 :(得分:0)

我遇到了同样的问题;如果存在错误,调试器将报告该错误,但是如果没有错误,它将不会在断点处停止。对我来说解决的更改是指定将要提供的确切文件名,而不只是本地主机。例如,在NodeJS上,Express仅指定localhost:3000不会在我的断点处停止,而是指定localhost:3000/index.html可以按预期工作

完整配置,可以按预期(迄今为止)在断点处停止:

我的文件夹在VSCode:learningPixi中打开,具有完整的文件夹位置(Ubuntu Linux):/home/leigh/node/pixi-tut/learningPixi

我的文件夹结构是:

/home/leigh/node/pixi-tut/learningPixi/.vscode/launch.json /home/leigh/node/pixi-tut/learningPixi/public/index.html /home/leigh/node/pixi-tut/learningPixi/server.js

launch.json文件的内容

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "chrome",
      "request": "launch",
      "name": "Launch Chrome against localhost",
      "url": "http://localhost:3000/index.html",
      "webRoot": "${workspaceFolder}/public",
      "skipFiles": ["pixi.min.js"]
    }
  ]
}

“ skipFiles”也非常有用,否则调试器会进入每个函数调用

我的(非常基本的)快速服务器配置仅用于调试静态文件中的JavaScript:

const express = require('express');
const path = require('path');

const app = express();
app.use(express.static(path.join(__dirname, '/public')));
app.listen(3000, () => console.log('App started on port 3000'));

并按照上述文件夹结构,确保index.html位于/ public文件夹中

如果从HTML文件中调试JavaScript,则可能还需要转到VSCode中的设置并启用:允许断点无处不在

答案 5 :(得分:0)

对于将来的读者:我遇到了这个问题,因为在尝试调试之前我已经运行了我的应用程序的产品构建。 prod版本删除了VS Code成功调试所需的源映射,因此我运行了我的应用程序的dev版本,然后进行调试,一切正常。