Nodejs 调试

debugger 标签相当于在代码中开启一个断点
node 执行时添加 inspect 参数,进入 inspect 模式,用help命令查看帮助。
Commands: run (r), cont (c), next (n), step (s), out (o), backtrace (bt), setBreakpoint (sb), clearBreakpoint (cb),
watch, unwatch, watchers, repl, restart, kill, list, scripts, breakOnException, breakpoints, version
输入 watch("my_expression") 开始监视一个表达式;watchers 显示活动监视器;unwatch("my_expression") 移除一个监视器。 在断点的源代码前显示。
此时repl打开js上下文即时求值环境,和chrome的debug的console是一样的。
如果想退出,请按下ctrl + c,这样就可以返 到debug模式
http://i5ting.github.io/node-debug-tutorial/

node inspector

node-inspector是通过websocket方式来转向debug输入输出的。
默认会监听8080端口,当然,也可能通过使用--web-port参数来修改。然后,在执行node程序的时候,多加个参数:--debug-brk。
使用:
node-debug tem.js
或者
node-inspector //先监听node进程5858
node --debug-brk tem.js //在第一行停止
chrome调试器F11跳转到下一个中断位置 ,F8 下一行
直接在chrome中修改文件:创建配置文件
// node v7 自带, 体验更好, --inspect-brk=9229
// node --inspect index.js
// use `node --inspect-brk` instead
// 不过 console 面板 不显示标准输出 的数据 // eval 大法好(曾经吐槽firefox sw调试想出来的)
// node 执行玩,require方法在process.mainModule找到。


生成 log 文件
NODE_ENV=production node --prof app.js
处理 log 文件
node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt
--preprocess 可以格式化成 json 格式
通过 v8/tools/profview/index.html 打开
其中包含代码执行所占用的 CPU ticks(CPU 时钟周期)



调试 ES6 modules,现在的方案是先编译成 es5,加上 sourcemap 进行调试。如果要直接调试,可以使用 babel-node,但是在调试上下文中变量有问题。使用 nodejs 原生 es6 modules 调试理论上没有问题。
NODE_OPTIONS='--experimental-modules --loader ./custom-loader.mjs' node —inspect-brk x.js
但是 Chrome 中调试有可能不能在 Filesystem 中看到文件,不方便打断点(需要添加 debugger 语句)(应该算 Chrome 的 bug)。
可以在 vscode 中调试:launch.json 中添加 `runtimeArgs`

REPL/Console 还不支持 es6 modules: