如何在 Visual Studio 代码中调试子 Node.JS 进程?
How to debug child Node.JS process in Visual Studio Code?
如何在 VS Code 中调试子 Node.JS 进程?
这是我要调试的代码示例:
var spawn = require('child_process').spawn;
var scriptPath = './child-script.js';
var runner_ = spawn('node', [scriptPath]);
您可以轻松地向 launch.json 添加新的启动配置,允许您附加到具有特定端口的 运行 节点实例:
{
"name": "Attach to Node",
"type": "node",
"address": "localhost",
"port": 5870,
}
只需确保 fork/spawn 您的节点进程使用 --debug 或 --debug-brk 参数。
寻找这个 npm 模块 child-process-debug。
我在 vscode 中创建了 2 个单独的启动配置:
一个用于主进程,另一个用于子进程
{
"name": "Attach",
"type": "node",
"request": "attach",
"port": 5858,
"address": "localhost",
"restart": false,
"sourceMaps": false,
"outFiles": [],
"localRoot": "${workspaceRoot}",
"remoteRoot": null
},
{
"name": "Attach child",
"type": "node",
"request": "attach",
"port": 5859,
"address": "localhost",
"restart": false,
"sourceMaps": false,
"outFiles": [],
"localRoot": "${workspaceRoot}",
"remoteRoot": null
}
工作流程如下:
- 使用
--debug
命令行开关启动主节点进程
$ node --debug master.js
- 通过调试面板使用
Attach
附加到 master.js
节点进程
- 在
child.js
进程中放置断点
- 使用
Attach child
快速脱离 main
进程并附加到 child
进程
出于调试目的,您可以使用 setTimeout
延迟进程之间的消息发送
// master.js
var child = child_process.fork(__dirname + './child.js')
setTimeout(function() {
child.send('...')
}, 5000)
在您的启动配置中添加 "autoAttachChildProcesses": true
如下所示
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"autoAttachChildProcesses": true,
"program": "${workspaceFolder}/index.js"
}
在您的 launch.json、"autoAttachChildProcesses" 中进行此更改:true
只需将此添加到您的调试器配置文件
{
"type": "node",
"request": "attach",
"name": "Attach by Process ID",
"processId": "${command:PickProcess}",
}
将调试器附加到进程 ID。当您 运行 此配置时,将提示一个进程列表,您可以在其中 select 要附加调试器的进程。
如何在 VS Code 中调试子 Node.JS 进程?
这是我要调试的代码示例:
var spawn = require('child_process').spawn;
var scriptPath = './child-script.js';
var runner_ = spawn('node', [scriptPath]);
您可以轻松地向 launch.json 添加新的启动配置,允许您附加到具有特定端口的 运行 节点实例:
{
"name": "Attach to Node",
"type": "node",
"address": "localhost",
"port": 5870,
}
只需确保 fork/spawn 您的节点进程使用 --debug 或 --debug-brk 参数。
寻找这个 npm 模块 child-process-debug。
我在 vscode 中创建了 2 个单独的启动配置:
一个用于主进程,另一个用于子进程
{
"name": "Attach",
"type": "node",
"request": "attach",
"port": 5858,
"address": "localhost",
"restart": false,
"sourceMaps": false,
"outFiles": [],
"localRoot": "${workspaceRoot}",
"remoteRoot": null
},
{
"name": "Attach child",
"type": "node",
"request": "attach",
"port": 5859,
"address": "localhost",
"restart": false,
"sourceMaps": false,
"outFiles": [],
"localRoot": "${workspaceRoot}",
"remoteRoot": null
}
工作流程如下:
- 使用
--debug
命令行开关启动主节点进程$ node --debug master.js
- 通过调试面板使用
Attach
附加到master.js
节点进程 - 在
child.js
进程中放置断点 - 使用
Attach child
快速脱离
main
进程并附加到 child
进程
出于调试目的,您可以使用 setTimeout
// master.js
var child = child_process.fork(__dirname + './child.js')
setTimeout(function() {
child.send('...')
}, 5000)
在您的启动配置中添加 "autoAttachChildProcesses": true
如下所示
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"autoAttachChildProcesses": true,
"program": "${workspaceFolder}/index.js"
}
在您的 launch.json、"autoAttachChildProcesses" 中进行此更改:true
只需将此添加到您的调试器配置文件
{
"type": "node",
"request": "attach",
"name": "Attach by Process ID",
"processId": "${command:PickProcess}",
}
将调试器附加到进程 ID。当您 运行 此配置时,将提示一个进程列表,您可以在其中 select 要附加调试器的进程。