gpt4 book ai didi

node.js - 在 VS 代码中调试由 Electron 生成的子进程

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:39 24 4
gpt4 key购买 nike

我正在使用 webpack 在 typescript 中构建一个 electron 应用程序,我遇到了以下 vscode 调试问题:

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

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

步骤:

  1. 我在终端中启动我的 Electron 应用
  2. 按 F5 启动 vscode 调试器

正如预期的那样,它在我为子进程代码构建的 webpack 的第一行中断(由于 debug-brk)。这允许我在我的 typescript 源代码中使用调试器注册额外的断点。

  1. 正如预期的那样,在继续时,vscode 在我的 ts 源代码中很好地命中了这些断点。好。

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

  1. 未命中构建中的初始断点

  2. 我手动添加的断点被标记为忽​​略(因为找不到生成的代码(源映射问题?)而忽略了断点。)

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

我意识到通过 Attach 进行调试与通过 Launch 进行调试不同,并且需要 debug-brk fork 强制执行的初始中断,以便为 Node 进程注册断点的机会附于。

问题:但是,我想改进我的调试体验的是,简单地重新启动调试器不足以重新注册一些新的(或旧)断点。我必须完全退出我的应用程序并再次启动它,之前调试器在重新启动时将再次停止在我构建的第一行并识别我在该阶段添加的断点。

有没有人可以推荐改善这种调试体验的方法?与 Launch 调试 session 相比,我不介意一些额外的步骤,但是必须手动退出并启动我的应用程序来调试它有点麻烦,并且使得在控制台中实际调试几乎更可取......

感谢您的建议!

最佳答案

好吧,对于这个用例,我实际上找到了一个非常好的调试 fork 进程的方法。我写出来供以后有类似需求的人引用:

我将子进程的开发从主进程中分离出来。两者都仅通过 process.on('message', handler)child.send(...) 进行通信。所以基本上,我在子进程中调用 process.on 时,条件是我是否设置了 process.env.NODE_ENV==='DEBUG'。然后我为子进程做了一个启动配置,就像这样

{
"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 传入的请求。

关于node.js - 在 VS 代码中调试由 Electron 生成的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42495365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com