在VS代码中debugging电子催生的subprocess

我正在使用webpack创build打字稿中的电子应用程序,并且正在运行以下vscodedebugging问题:

Info:主进程通过调用fork('./dist/child', [], {execArgv: ['--debug-brk=3001']})产生一个subprocess。 我的launch.json如下所示:

 { "name": "Debug child process", "type": "node", "request": "attach", "address": "localhost", "port": 3001 } 

脚步:

  1. 我在terminal上启动我的电子应用程序
  2. 点击F5启动vscodedebugging器

正如所料,它在我的webpack构build的subprocess代码(由于debug-brk )的第一行打破了。 这允许我在打字稿源中用debugging器注册更多的断点。

  1. 正如所料,在继续之后,vscode很好地在我的源代码中击中了这些断点。 好。

问题:如果我现在重新启动debugging器(没有任何源更改或注册新的断点)…

  1. 构build中的初始断点没有命中

  2. 我手动添加的断点被标记为忽​​略( 断点被忽略,因为生成的代码没有find(源图问题?)。

  3. 我在此处添加的任何新断点也被标记为忽​​略。

我意识到Attach的debugging和Launch的debugging是不同的,而debug-brk fork强制执行的初始中断需要给予一个机会来注册附加到的节点进程的断点。

问题:但是,我希望在我的debugging体验中改进的是,只需重新启动debugging器就不足以重新注册一些新的(或旧的)断点。 我必须完全退出我的应用程序,并重新启动它, 然后重新启动时的debugging器将再次停止在我的构build的第一行,并识别我在该阶段添加的断点。

有没有人可以推荐改善这种debugging体验的方法? 与启动debugging会话相比,我不介意一些额外的步骤,但是必须手动退出并启动我的应用程序才能进行debugging,这有点麻烦,而且实际上在控制台中进行debugging几乎更可取…

感谢您的任何build议!

好吧,对于用例,我已经find了一个非常好的方法来debugging分叉进程。 我会把它写下来,以供将来参考有类似需求的人:

我把主stream程中的subprocess的发展分开了。 两者只通过process.on('message', handler)child.send(...) 。 所以基本上我让我的process.on在subprocess中调用是否设置了process.env.NODE_ENV==='DEBUG' 。 然后我为这个subprocess做了一个启动configuration,像这样

 { "type": "node2", "request": "launch", "name": "Launch child process", "program": "${workspaceRoot}/src/main/child_process/Child.ts", "cwd": "${workspaceRoot}", "outFiles": [ "${workspaceRoot}/dist/child.js" ], "env": { "NODE_ENV": "DEBUG" }, "sourceMaps": true } 

然后,我可以通过模拟消息手动调用处理程序来模拟在生产环境中通过process.on进入的请求。