你会 Nodejs (多进程)调试嘛

前言

我老是调侃好多 nodejs 开发都不会多进程调试,这其中就包括了我。
直到有一天,我不得不使用它来解决一些问题,做为一个懒人,我喜欢用简单的办法,因此这多是最简单的 Nodejs 调试方法,话很少说进入正题javascript

单进程调试

console.log()

单进程的调试,若是场景不复杂、比较好预判,能够直接打印到控制台html

// 添加参数 --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 中就能够开启调试java

多进程调试

假设我有一个这样的多进程 Nodejs 服务node

if (cluster.isMaster) {
  for (var i = 0; i < cpuCount; i++) {
    cluster.fork();
  }
  const agentWorker = cluster.fork({ 'AGENT_WORKER': true });
}

注意对比,经过cluster.setupMaster能够设置 master 进程 fork work 进程时的参数配置chrome

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 里面进行多进程调试chrome-devtools

若是你还不会,快去试试吧url

相关文章
相关标签/搜索