【发布时间】:2018-03-29 18:35:39
【问题描述】:
(注意:我的具体用例可能看起来很复杂,但基本思想并不复杂!)
我有一个启动 Docker 容器的 Gulp 脚本,该容器本身包含并启动另一个 Gulp 脚本,该脚本使用 Nodemon 在调试模式下启动最终节点脚本!在 Docker 容器中运行的 Nodemon Gulp 脚本如下所示:
nodemon({
"script": `start.js`,
"nodeArgs": [`--debug=0.0.0.0:5858`, "-nolazy"],
"ext": "js",
"restartable": true
});
我希望能够在 Visual Studio Code 中按 [F5],启动最终脚本并附加 VSCode 的调试器!
有什么作用:
如果我手动启动第一个 Gulp 脚本,则在终端中启动 Docker 容器,执行带有 Nodemon 的另一个嵌入式 Gulp 脚本并启动最终脚本。我可以然后在 VSCode 中按 [F5] 来启动 attach 启动配置,然后我就可以调试了! 5858 端口被 Docker 暴露,一切正常。
我想要什么:
我希望能够跳过在终端中手动启动脚本。我想要一个 VSCode 启动配置,它自己做所有事情 => 在 VSCode 的集成终端中启动脚本,并将调试器附加到由脚本本身启动的调试过程中。
我试过了:
一个带有
preLaunchTask任务的"request": "attach"启动配置。该任务是启动第一个 Gulp 脚本。这种方法的问题是preLaunchTask任务永远不会结束:它启动终端中的第一个脚本(任务有一个:“"_runner": "terminal"”)但最终的脚本是监听并且不退出(它实际上是在监听请求)...这似乎阻止了 VSCode 调试器启动,因为preLaunchTask任务永远不会退出。一个
"request": "launch"启动配置,用于启动第一个脚本。但是在这里,即使它看起来可以工作(橙色调试栏出现),调试实际上也不会工作。如果我理解正确,这是因为launch启动配置会自行启动 Node 调试器(在指定端口上),因此调试器由 Docker 容器内的 Nodemon 启动,永远不会被监听到。
换句话说:我只是想点击[F5],所以在集成终端中启动一个脚本,没有调试器,然后VSCode会将调试器附加到生成的127.0.0.1:5858调试过程中,不管这个过程实际上是如何开始了。
更新:我在 Github 上也有关于尝试使用 compound 启动配置的建议,但它也不起作用:https://github.com/Microsoft/vscode/issues/36685
【问题讨论】:
标签: node.js debugging visual-studio-code