使用Visual Studio Code调试ExpressJS服务器端代码

12

我使用以下工具制作了一个简单的CRUD应用:

  • express: 4.13.4
  • gulp: 3.9.1
  • mongodb :v3.0.6
  • reactjs : 15.0.2.
  • node : 4.0.0

关于服务器端代码,据我所知可以通过 Visual Studio Code (v1.1.1.) 进行调试。

在 git bash 中,我通过 gulp serve 命令启动应用程序。但是,我不知道要如何开始调试!

以下是我的 gulp 任务代码片段。

gulp.task('serve',['bundle','start-server'],function(){

    browserSync.init({
        proxy:'http://localhost:3000',
        port:9001
    });

});

当我们在VS Code上点击调试按钮以启动调试界面时,会出现一个launch.json文件,并提供两个配置选项。

{
"version": "0.2.0",
"configurations": [
    {
        "name": "Launch",
        "type": "node",
        "request": "launch",
        "program": "${workspaceRoot}",
        "stopOnEntry": false,
        "args": [],
        "cwd": "${workspaceRoot}",
        "preLaunchTask": null,
        "runtimeExecutable": null,
        "runtimeArgs": [
            "--nolazy"
        ],
        "env": {
            "NODE_ENV": "development"
        },
        "externalConsole": false,
        "sourceMaps": false,
        "outDir": null
    },
    {
        "name": "Attach",
        "type": "node",
        "request": "attach",
        "port": 3000,
        "address": "localhost",
        "restart": false,
        "sourceMaps": false,
        "outDir": null,
        "localRoot": "${workspaceRoot}",
        "remoteRoot": null
    }
]

}

我猜这些是launchattach的配置。但我们要如何通过调试实际启动gulp。

我看到过有人通过修改"program"键来启动grunt进程,例如"program": "/usr/local/bin/grunt"。但似乎我无法为gulp做到这一点。

即使我已经通过git bash启动了我的应用程序,并尝试像这里提到的那样“附加”调试器,vs code仍然显示一个错误消息,说“已取消”!

简而言之;

  • 当我们在VS代码中启动调试时,我们如何启动gulp(或)grunt(或)启动服务器?
  • 是否可能通过cmd或bash外部启动应用程序,并仍能够使用调试器调试服务器端代码?如果是这样,那么在launch.json中需要进行哪些更改?
1个回答

23

好的,经过众多书签和链接后,我终于成功通过启动和附加调试。

通过启动配置进行调试:

      {
            "name": "Launch",
            "type": "node",
            "request": "launch",
            "program": "${workspaceRoot}/server.js",
            "stopOnEntry": true,
            "args": [],
            "cwd": "${workspaceRoot}",
            "preLaunchTask": null,
            "runtimeExecutable": null,
            "runtimeArgs": [
                "--nolazy"
            ],
            "env": {
                "NODE_ENV": "development"
            },
            "externalConsole": false,
            "sourceMaps": false,
            "outDir": null
        }

在VSC调试视图上选择启动选项,并按下绿色的>按钮,您应该在VSC控制台中看到类似以下内容。

node --debug-brk=21735 --nolazy server.js

调试器应该在你的server.js文件的第一行上暂停。使用断点进行调试! :)

通过 attach 配置进行调试:

       {
            "name": "Attach",
            "type": "node",
            "request": "attach",
            "port": 5858,
            "address": "localhost",
            "restart": false,
            "sourceMaps": false,
            "outDir": null,
            "localRoot": "${workspaceRoot}",
            "remoteRoot": null
        }

在外部启动您的服务器

$node --debug-brk server.js

您的提示应该暂停在

Debugger listening on port 5858

在VSC调试视图上选择“附加选项”,然后按下绿色的“>”按钮,调试器应该会自动附加并暂停在server.js的第一行。

无休止地进行调试


如果第一次解决方案未连接,请尝试刷新浏览器。此外,VS Code在屏幕底部有一个自动连接选项。 - timebandit
1
outDir现已弃用。 - Liam
什么是“外部启动服务器”? - Triet Pham
@TrietPham,附加程序不会自动启动服务器,您需要手动启动,例如npm run start或类似于此的命令,具体取决于您的脚本。 - Daniel
我认为这已经在帖子中说过了:
$node --debug-brk server.js
这有意义吗?
- Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接