前言
我总是调侃好多 nodejs 开发都不会多进程调试,这其中就包括了我。
直到有一天,我不得不使用它来解决一些问题,作为一个懒人,我喜欢用简单的办法,所以这可能是最简单的 Nodejs 调试方法,
话不多说进入正题
单进程调试
console.log()
单进程的调试,如果场景不复杂、比较好预判,可以直接打印到控制台
// 添加参数 --debug-brk 可以在第一行断点
// node --inspect --debug-brk index.js
node --inspect index.js
nodejs 在 v6.3.0
版本之后支持了 node --inspect index.js
这种调试方式,可以打开一个 chrome 页面,用前端熟悉的方式进行断点
调试。
Debugger listening on port 5863.
Warning: This is an experimental feature and could change at any time.
To start debugging, open the following URL in Chrome:
chrome-devtools://devtools/remote/serve_file/@60cd6e859b9f557d2312f5bf532f6aec5f284980/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:5863/7fd57fb3-86fa-4519-8621-39147428b15d
像这样,会有一个 chrome-devtools
协议的地址,复制到 chrome 中就可以开启调试
多进程调试
假设我有一个这样的多进程 Nodejs 服务
if (cluster.isMaster) {
for (var i = 0; i < cpuCount; i++) {
cluster.fork();
}
const agentWorker = cluster.fork({ 'AGENT_WORKER': true });
}
注意对比,通过cluster.setupMaster
可以设置 master 进程 fork work 进程时的参数配置
if (cluster.isMaster) {
if (debug) {
// 在 fork 进程之前添加调试参数,--debug-brk 指代码在执行第一行时进行断点
cluster.setupMaster({
execArgv: ['--inspect', '--debug-brk']
});
}
for (var i = 0; i < cpuCount; i++) {
cluster.fork();
}
const agentWorker = cluster.fork({ 'AGENT_WORKER': true });
}
像单进程一样,不过每个进程都会有一个调试 url,但我们依然可以直接在 chrome 里面进行多进程调试
如果你还不会,快去试试吧