3

前言

我总是调侃好多 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 里面进行多进程调试

如果你还不会,快去试试吧


肖沐宸
251 声望12 粉丝