2017-10-17 160 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

相關問題