nodejs调试总结

网上有关调试nodejs的方法文章很大,但是我跟着网上的文章来调试nodejs时却走了不少弯路,特别是涉及多进程调试的时候,所以总结 一下。 

我的调试环境: nodejs服务器环境是远程的ubuntu,使用我pc(windows10)的Chrome调试。 (网上很多方法,webstorm,visual studio code之类工具,命令行调试我没试过,感觉也不是太方便我这里就不做介绍了,还有由于nodejs版本还有Chrome版本的原因调试方法也有区别,还有很多文章讲的是本地调试,因为这样各种各样的区别也让我走了不少弯路,这些我这边通通都不介绍了)

这里介绍的调试版本要求:nodejs 6.3+  Chrome 55+

服务器端:

比如要在服务器上调试 server.js文件: node --inspect=0.0.0.0:2992 --debug-brk server.js(0.0.0.0:2992 这里是ip和port要以根据你的需要写,注意写IP如果写成127.0.0.1就只能本机调试不能远程调试了。 --debug-brk 是指执行js第一句话时就停止,不需要可以却掉)

 

客户端 :

Chorme中输入 http://服务器ip:2992/json/list (这里的port就是你上面输的port),打开后如下图。 

nodejs调试总结

 

然后打开devtoolsFrontendUrl描述的 url

chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=172.28.22.104:5589/d1c8ae00-d4e7-46eb-9a35-e60f308478c5

这里就是我们熟悉的chrome调试界面了。

看到这里感觉其实调试还蛮简单的,但是由于我下了个开源工程,里面的有多进程的node,这些子进程是用js代码启动的,首先要找到启动这些子进程的代码的地方。 

在启动的地方加上参数 {execArgv:--inspect=ip:port,path} //这里ip:port 端口要注意不要重复了,因为是多进程,得为每个进程整个不一样的端口,后面path是要启动进程的js的路径。 

例子:我这里是 是通过child_process的fork方法来创建子进程的。 

原来的代码: 

nodejs调试总结

修改过可调试的代码:

 nodejs调试总结

这里 var processParameters  = "--inspect=0.0.0.0:2992,"+processPath     //(processPath   就是要启动的js的路径。

然后在window pc上chrome的操作就跟上面的方法一样了。 

其实这个调试并不复杂 ,但是由于网上的资料我尝试着跟着做很多都不成功,不知道什么原因,可能也是我理解有误,每个人的环境不一样,最后还是自己试出来的。

这里介绍一下原理吧: node 程序是封装了V8引擎的可执行程序 ,node  *.js 就这执行这个*.js文件,我们加上参数 --inspect=0.0.0.0:2992 ,node这个程序就会搞个socket监听这个端口, 我们就可以用远程的Chrome连接这个端口进行调试了,不得不说这个调试还是做得很方便的。