Skip to content

Latest commit

 

History

History
101 lines (71 loc) · 3.11 KB

2.2.2 node 调试.md

File metadata and controls

101 lines (71 loc) · 3.11 KB

node 调试.

Chrome DevTools

  • console.log 就不用说了。

  • debugger 不推荐使用,因为:
    使用繁琐,需手动打点。
    若忘记删除 debugger,还会引起性能问题。

  • node-inspector 已经退出历史舞台。[email protected] 以后内置了一个调试器,可以结合 Chrome DevTools 使用,而且比 node-inspector 更强大。

下面就讲讲 Chrome DevTools 的用法。

  • NIM。NIM(Node Inspector Manager)是一个 Chrome 插件,可以帮助我们快捷地打开 DevTools,也可以设置自动发现并打开 DevTools。

  • inspect-process

    npm i inspect-process -g
    inspect app.js
    
  • process._debugProcess

    • 通过 ps 命令或者 pgrep -n node 查看当前启动的 Node.js 进程的 pid,例如:53911。
    • 打开新的终端,运行:node -e "process._debugProcess(53911)",原来的 Node.js 进程会打印出:Debugger listening on ws://127.0.0.1:9229/2331fa07-32af-45eb-a1a8-bead7a0ab905。
    • 调出 Chrome DevTools 进行调试。

调试工具

  • debug 是一个小巧却非常实用的日志模块,可以根据环境变量决定打印不同类型(或级别)的日志。代码如下:
app.js

const normalLog = require('debug')('log')
const errorLowLog = require('debug')('error:low')
const errorNormalLog = require('debug')('error:normal')
const errorHighLog = require('debug')('error:high')

setInterval(() => {
  const value = Math.random()
  switch (true) {
    case value < 0.5: normalLog(value); break
    case value >= 0.5 && value < 0.7: errorLowLog(value); break
    case value >= 0.7 && value < 0.9: errorNormalLog(value); break
    case value >= 0.9: errorHighLog(value); break
    default: normalLog(value)
  }
}, 1000)
  • 运行:
$ DEBUG=* node app.js
  • repl2:REPL 的增强版,repl2 会根据一个用户配置(~/.noderc),预先加载模块到 REPL 中
$ npm i repl2 -g
  • power-assert

注意:在使用 intelli-espower-loader 时,要求必须将测试文件放到 test/ 目录下,所以我们在 test 目录下创建 test/app.js,将原来的 test.js 代码粘贴过去。

  • 安装 power-assert 和 intelli-espower-loader,然后运行测试:
$ npm i power-assert intelli-espower-loader --save-dev
$ mocha -r intelli-espower-loader

node-clinic:是一个开箱即用的 Node.js 应用诊断工具。

npm i clinic -g

使用 clinic doctor 启动并诊断 Node.js 应用:

$ clinic doctor -- node app.js
使用 ab 压测:

$ ab -c 10 -n 200 "http://localhost:3000/"
CTRL+C 终止测试程序,终端打印出:

Warning: Trace event is an experimental feature and could change at any time.
^Canalysing data
generated HTML file is 51485.clinic-doctor.html
用浏览器打开 51485.clinic-doctor.html

参考