nodejs调试

1. 使用node-inspector(已过时)

使用npm安装:

$ npm install -g node-inspector

然后需要通过浏览器连接到node-inspector,需要启动inspector服务:

$ node-inspector &

最后以debug模式运行node.js应用:

$ node --debug app.js

通过URL http://127.0.0.1:8080/debug?port=5858 就可以进行调试了

2. 使用node命令直接连接chrome

Node.js 提供 Inspector Protocol 调试协议来支持调试。

简单来说,在运行 Node.js 程序时开启一个进程来监听调试请求,默认的监听端口是 9229。每个监听进程都被分配了唯一的 UUID,调试客户端通过 ws://{host}:{port}/{UUID} 和监听进程建立 websocket 通信。

Node.js 开启调试服务被动等待,调试客户端主动发起对接。

启动时开启调试服务

Node.js 调试服务默认关闭,需要通过 --inspect 或 --inspect-brk 标识符开启,服务的默认端口和地址也可通过 node --inspect=[host:port] 指定。

node --inspect index.js 开启调试服务,端口为 9229
node --inspect=3003 index.js 开启调试服务,端口为 3003
node --inspect=192.168.0.101 开启调试服务,地址为 192.168.0.101:9229
node --inspect=192.168.0.101:3003 开启调试服务,连接地址为 192.168.0.101:3003

那么,--inspect 和 --inspect-brk 有什么不同?

--inspect-brk 会在代码首行停住。

--inspect 启动调试服务,跑完程序就退出。除非是有异步任务在,不然完全不给调试器对接的机会。
--inspect-brk 启动完调试服务就停在首行,等着调试器接入,接入后断在第一行代码等待下一步操作。

对于 node 命令之外的启动脚本,例如 npm/yarn/vercel/next。--inspect 是 Node.js 的标识符,其他脚本无法识别,这种情况可以设置变量 NODE_OPTIONS 来解决。

NODE_OPTIONS='--inspect' vercel dev

调试客户端(Inspector client)

Node 内置命令行调试器,通过 node inspect 命令执行,通过输入命令来描述行为不如可视化操作高效,可视化调试器必不可少。
目前主流的 IDE 几乎都已经内置 Node.js 调试客户端,例如前端领域最常用的 VSCode、WebStorm、Chrome DevTool。
Chrome DevTools 会根据地址列表自动检查调试服务启动情况,默认地址有本地的 9229 和 9222 端口。chrome://inspect 面板负责调试管理。

调试命令

node --debug/--debug-brk (node8.0之前)

node --inspect/--inspect-brk (node8.0之后)

带-brk,会默认停止在第一行,可以继续调试。不带,则会一下子执行完,若只是执行一段代码,没有线程持续运行,则会很快执行完毕,没有机会去调试

启动之后,打开chrome的开发者工具,左侧有个Node.js的绿色菱形图标,点击就可以进入调试。

如果node线程已经启动,可以通过附加到进程来调试:

ps ax | grep app.js 查看进程号

node -e 'process._debugProcess(进程号)' 附加到该进程进行调试

node的调试服务(ws服务端)启动之后,用chrome devtools的客户端可以连接,具体可以:

打开 chrome://inspect 的 url 就会看到这个可以连接的 target

3. 使用 visual studio code

打开调试面板,添加koa-template对应的launch.json配置文件。其中:

Run Script: dev:以npm run dev启动,附加到node进程调试,不能自行用npm run dev启动,必须从这里启动

Launch: nodemon:  以nodemon启动,支持热修改和调试,不能自行启动

Attach: Nodemon: 对已启动的nodemon进程进行附加调试,对已用npm run dev启动的项目,可以从这里调试

VSCode调试方法:

1. 项目根目录下加一个 .vscode/launch.json 的文件

2. 类型选择 attach,lanuch文件中的port选择用inspect启动的node调试服务的端口(命令行有输出),或者

直接 launch program,这样不用单独启动node inspect服务,vscode会自动启动服务并连接上,进行调试 

 

具体可参考:Node.js 调试一路走来经历了什么

         VSCode 启动 Node.js 调试的几种方式                 

posted @ 2017-05-15 00:50  全玉  阅读(165)  评论(0编辑  收藏  举报