你會 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

相關文章
相關標籤/搜索