我老是調侃好多 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