VSCode - 如何使用启动配置调试启动自己的调试器的节点程序?
(注:我的具体使用情况看起来很复杂,但基本思想是不是!)VSCode - 如何使用启动配置调试启动自己的调试器的节点程序?
我有启动泊坞容器,它本身包含并开始使用Nodemon
启动另一个咕嘟咕嘟脚本咕嘟咕嘟脚本调试模式下的最终节点脚本!该Nodemon咕嘟咕嘟脚本运行里面的泊坞容器看起来是这样的:
nodemon({
"script": `start.js`,
"nodeArgs": [`--debug=0.0.0.0:5858`, "-nolazy"],
"ext": "js",
"restartable": true
});
我希望能够在Visual Studio代码按[F5]
,都最终脚本起步,并没有VSCode的调试器连接到它!
什么确实工作:
如果我手动启动第一咕嘟咕嘟脚本,在终端,泊坞窗容器启动时,与Nodemon其他嵌入式咕嘟咕嘟脚本执行和最终的脚本启动。我可以然后按[F5]
VSCode启动attach
启动配置,我可以调试!端口5858
由Docker公开,一切正常。
我想什么:
我希望能够跳过脚本的手动启动的终端。我想要一个VSCode启动配置,它可以自行完成所有操作=>在VSCode集成终端中启动脚本,并将调试器附加到脚本本身启动的调试过程中。
我试图:
与
preLaunchTask
任务的"request": "attach"
启动配置。该任务正在启动第一个Gulp脚本。这种方法的问题是,任务永远不会结束:它启动终端中的第一个脚本(该任务有一个“"_runner": "terminal"
”),但最终脚本正在侦听并且不会退出(它实际上是侦听请求)...这似乎阻止VSCode调试器启动,因为任务永远不会退出。A
"request": "launch"
启动启动第一个脚本的配置。但是在这里,即使它看起来正常工作(出现橙色的调试条),调试也不会实际工作。如果我理解正确,这是因为启动配置本身(在指定的端口上)启动节点调试器,因此在Docker容器内由Nodemon启动的调试器将永远不会被侦听。
换句话说:我只是想打[F5]
这样一个脚本在综合终端推出,无需调试,然后VSCode将一个调试器附加到所产生的127.0.0.1:5858
调试过程中,wathever怎么这个过程实际上是开始。
更新:我也有一个建议,在Github上关于尝试使用compound
启动配置,但它也不起作用:https://github.com/Microsoft/vscode/issues/36685
你的第一次尝试,一个attach
配置有preLaunchTask
是正确的。你可能只需要一个调整。默认情况下,vscode将等待任务终止,因此您需要通过添加"isBackground": true
来告诉它该任务将在后台运行。然后你需要告诉它在任务输出中要注意哪些模式,以了解任务何时完成。这一点有点烦人,因为你必须用problemMatcher来做这件事,但这个任务不应该引起问题,所以你需要给它一个不匹配任何东西的正则表达式。例如: -
"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
调试器仍然没有踢...我的'启动配置':https://pastebin.com/raw/RBSJu0kx和我的'tasks.json':https://pastebin.com/raw/WnacJZp5。应用程序可以正常启动,但只有在终端中手动退出应用程序时调试器才会启动......任何想法?谢谢你的帮助! – electrotype
我懂了! :-)你的例子的问题似乎是'“startsPattern”'。如果我使用'“activeOnStart”:false',然后'“startsPattern”:“调试过程即将开始时的一些模式”,它就起作用了!请修改您的答案,我会接受它! – electrotype
我剩下的唯一问题是,如果发生更改并且Nodemon重新加载在Docker中运行的应用程序,则VSCode的调试器将停止,但在尝试重新挂接时过早超时('“restart”:true')...在调试过程之前超时实际上在Docker中重新启动。如果你有任何想法来解决这个问题,我全是耳朵! – electrotype