VSCode - 如何使用启动配置调试启动自己的调试器的Node程序?

时间:2017-10-17 23:48:08

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

(注意:我的具体用例可能看起来很复杂,但基本想法不是!)

我有一个Gulp脚本启动一个Docker容器,它本身包含并启动另一个Gulp脚本,该脚本使用Nodemon以调试模式启动最终的Node脚本!在Docker容器内部运行的Nodemon Gulp脚本如下所示:

nodemon({
    "script": `start.js`,
    "nodeArgs": [`--debug=0.0.0.0:5858`, "-nolazy"],
    "ext": "js",
    "restartable": true
});

我希望能够在Visual Studio代码中按[F5],启动最终脚本并附加VSCode的调试器!

的工作

如果我手动启动第一个Gulp脚本,在终端中启动Docker容器,则执行带有Nodemon的其他嵌入式Gulp脚本并启动最终脚本。我可以然后在VSCode中按[F5]启动 attach 启动配置,我就可以调试了! Docker公开了端口5858,一切运行正常。

我想要什么

我希望能够在终端中跳过手动启动脚本。我想要一个VSCode启动配置,它可以自行完成所有操作=>在VSCode的集成终端中启动脚本,并将调试器连接到脚本本身启动的调试过程。

我试过

  1. 带有 "request": "attach" 任务的 preLaunchTask 启动配置。该任务是启动第一个Gulp脚本。这种方法的问题是 preLaunchTask 任务永远不会结束:它启动终端中的第一个脚本(任务有一个:" "_runner": "terminal"&#34 ;)但最终脚本正在侦听并且没有退出(它实际上正在侦听请求)......这似乎阻止了VSCode调试器启动,因为 {{1} } 任务永远不会退出。

  2. 启动第一个脚本的 preLaunchTask 启动配置。但是在这里,即使看起来它会起作用(出现橙色调试条),调试也不会真正起作用。如果我理解正确,这是因为 "request": "launch" 启动配置本身(在指定端口上)启动Node调试器,因此调试器由Nodeer启动,在Docker容器内,永远不会听取了。

  3. 换句话说:我只想点击launch,以便在集成终端中启动脚本,无需调试器,然后VSCode会将调试器附加到生成的[F5]调试过程,观察如何这个过程实际上已经开始了。

    更新:我还在Github上建议尝试使用127.0.0.1:5858启动配置,但它也不起作用:https://github.com/Microsoft/vscode/issues/36685

1 个答案:

答案 0 :(得分:1)

您的第一次尝试,attach配置preLaunchTask是正确的。你可能只需要一次调整。默认情况下,vscode将等待任务终止,因此您需要通过添加"isBackground": true告诉它任务将在后台运行。然后,您需要告诉它在任务的输出中要注意哪些模式,以了解任务何时完成。这一点有点烦人,因为你必须使用problemMatcher这样做,但是这个任务不应该有问题,所以你需要给它一个不匹配任何东西的正则表达式。 e.g:

"problemMatcher": {
    "pattern": {
        "regexp": "__________"
    },
    "background": {
        "activeOnStart": false,
        "beginsPattern": "Some pattern when the debugging process is about to start",
        "endsPattern": "Ready for attach"
    }
}

任务运行器正在观察程序输出以匹配endsPattern - 当某些输出匹配时,它将知道程序已准备好供调试器附加。如果您的脚本没有产生任何输出,则应在调用nodemon后添加一些console.log。

通常,problemMatcher用于匹配构建任务输出的问题,而正则表达式可以匹配文件名,行和错误消息。但是在这里我们只是将它用于"背景"模式,所以我们给它一个虚拟正则表达式。这是一个描述此变通方法的线程,以及如何通过移动"背景" patternMatcher中的模式:  https://github.com/Microsoft/vscode/issues/6209#issuecomment-289411630

以下是有关观看任务的文档,有关详情:https://code.visualstudio.com/docs/editor/tasks#_background-watching-tasks