繁体   English   中英

在VS代码中调试由电子产生的子进程

[英]Debugging child process spawned by electron in VS code

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

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

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

脚步:

  1. 我在终端上发布我的电子应用程序
  2. 点击F5启动vscode调试器

正如预期的那样,它在我的webpack构建的第一行中为子进程代码打了一个休息时间(由于debug-brk )。 这允许我在我的打字稿源中使用调试器注册其他断点。

  1. 正如预期的那样,一旦继续,vscode会在我的ts源中很好地击中那些断点。 好。

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

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

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

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

我意识到Attach的调试与Launch的调试不同,并且需要一个debug-brk 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进入的请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM