2017-10-17 162 views
0

(注:我的具体使用情况看起来很复杂,但基本思想是不是!)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集成终端中启动脚本,并将调试器附加到脚本本身启动的调试过程中。

我试图

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

  2. A "request": "launch"启动启动第一个脚本的配置。但是在这里,即使它看起来正常工作(出现橙色的调试条),调试也不会实际工作。如果我理解正确,这是因为启动配置本身(在指定的端口上)启动节点调试器,因此在Docker容器内由Nodemon启动的调试器将永远不会被侦听。

换句话说:我只是想打[F5]这样一个脚本在综合终端推出,无需调试,然后VSCode将一个调试器附加到所产生的127.0.0.1:5858调试过程中,wathever怎么这个过程实际上是开始。

更新:我也有一个建议,在Github上关于尝试使用compound启动配置,但它也不起作用:https://github.com/Microsoft/vscode/issues/36685

回答

1

你的第一次尝试,一个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

+0

调试器仍然没有踢...我的'启动配置':https://pastebin.com/raw/RBSJu0kx和我的'tasks.json':https://pastebin.com/raw/WnacJZp5。应用程序可以正常启动,但只有在终端中手动退出应用程序时调试器才会启动......任何想法?谢谢你的帮助! – electrotype

+0

我懂了! :-)你的例子的问题似乎是'“startsPattern”'。如果我使用'“activeOnStart”:false',然后'“startsPattern”:“调试过程即将开始时的一些模式”,它就起作用了!请修改您的答案,我会接受它! – electrotype

+0

我剩下的唯一问题是,如果发生更改并且Nodemon重新加载在Docker中运行的应用程序,则VSCode的调试器将停止,但在尝试重新挂接时过早超时('“restart”:true')...在调试过程之前超时实际上在Docker中重新启动。如果你有任何想法来解决这个问题,我全是耳朵! – electrotype

相关问题