(注意:我的具体用例可能看起来很复杂,但基本的想法不是!)
我有一个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 Code中按 [F5]
,启动最终脚本并附加VSCode的调试器!
What does work :
如果我手动启动第一个Gulp脚本,在终端中启动Docker容器,则执行带有Nodemon的其他嵌入式Gulp脚本并启动最终脚本 . 然后我可以在VSCode中按 [F5]
启动 attach
启动配置,我就可以调试了!端口 5858
由Docker公开,一切运行正常 .
What I want :
我希望能够跳过在终端中手动启动脚本 . 我想要一个VSCode启动配置,它可以自行完成所有操作=>在VSCode的集成终端中启动脚本,并将调试器连接到脚本本身启动的调试过程 .
I tried :
-
带有
preLaunchTask
任务的"request": "attach"
启动配置 . 该任务是启动第一个Gulp脚本 . 这种方法的问题是preLaunchTask
任务永远不会结束:它启动终端中的第一个脚本(任务有一个:“"_runner": "terminal"
”),但最后脚本正在侦听并且实际上没有监听请求 . ..这似乎阻止VSCode调试器启动,因为preLaunchTask
任务永远不会退出 . -
启动第一个脚本的
"request": "launch"
启动配置 . 但是在这里,即使看起来它会起作用(出现橙色调试条),调试也不会真正起作用 . 如果我理解正确,这是因为launch
启动配置自己启动一个Node调试器(在指定的端口上),因此调试器将始终由Docker容器内的Nodemon启动,永远不会被监听 .
换句话说:我只想点击 [F5]
,这样就可以在集成终端中启动脚本,无需调试器,然后VSCode会将调试器连接到生成的 127.0.0.1:5858
调试过程,看看这个过程是如何实际启动的 .
UPDATE :我还在Github上建议尝试使用 compound
启动配置,但它也不起作用:https://github.com/Microsoft/vscode/issues/36685
1 Answer
你第一次尝试
attach
配置preLaunchTask
是正确的 . 你可能只需要一次调整 . 默认情况下,vscode将等待任务终止,因此您需要通过添加"isBackground": true
告诉它任务将在后台运行 . 然后你需要告诉它在任务中要注意哪些模式匹配任何东西 . 例如 . :任务运行器正在观察程序输出以匹配
endsPattern
- 当某些输出匹配时,它将知道程序已准备好供调试器附加 . 如果您的脚本没有产生任何输出,则应在调用nodemon
后添加一些console.log .通常,problemMatcher用于匹配构建任务输出的问题,正则表达式可以匹配文件名,行和错误消息 . 但是在这里我们只是将它用于"background"模式,所以我们给它一个虚拟正则表达式 . 这是一个描述此变通方法的线程,以及如何通过将"background"模式移出patternMatcher来更轻松:https://github.com/Microsoft/vscode/issues/6209#issuecomment-289411630
以下是有关观看任务的文档,以获取更多详细信息:https://code.visualstudio.com/docs/editor/tasks#_background-watching-tasks