JavaScript程序越来越复杂,调试工具的重要性日益凸显。客户端脚本有浏览器,Node脚本怎么调试呢?
2016年,Node决定将Chrome浏览器的"开发者工具"作为官方的调试工具,使得Node脚本也可以使用图形界面调试,这大大方便了开发者。
本文介绍如何使用Node脚本的调试工具。
为了方便讲解,下面是一个示例脚本。首先,新建一个工作目录,并进入该目录。
$npminit-y$npminstall--savekoakoa-route接着,新建一个脚本app.js,并写入下面的内容。
现在,运行上面的脚本。
接下来,就要开始调试了。一共有两种打开调试工具的方法,第一种是在Chrome浏览器的地址栏,键入chrome://inspect或者about:inspect,回车后就可以看到下面的界面。
在Target部分,点击inspect链接,就能进入调试工具了。
调试工具其实就是"开发者工具"的定制版,省去了那些对服务器脚本没用的部分。
它主要有四个面板。
这些面板的用法,基本上跟浏览器环境差不多,这里只介绍Sources(源码)面板。
进入Sources面板,找到正在运行的脚本app.js。
在第11行(也就是下面这一行)的行号上点一下,就设置了一个断点。
进入Console面板,输入name,会返回alice。这表明我们正处在断点处的上下文(context)。
再切回Sources面板,右侧可以看到Watch、CallStack、Scope、Breakpoints等折叠项。打开Scope折叠项,可以看到Local作用域和Global作用域里面的所有变量。
Local作用域里面,变量name的值是alice,双击进入编辑状态,把它改成bob。
然后,点击顶部工具栏的继续运行按钮。
页面上就可以看到Hellobob了。
命令行下,按下ctrl+c,终止运行app.js。
$node--inspect=9229-e"setTimeout(function(){console.log('yes');},30000)"上面代码中,--inspect=9229指定调试端口为9229,这是调试工具默认的通信端口。-e参数指定一个字符串,作为代码运行。
访问chrome://inspect,就可以进入调试工具,调试这段代码了。
$node--inspect-brk=9229app.js上面代码中,--inspect-brk指定在第一行就设置断点。也就是说,一开始运行,就是暂停的状态。
打开调试工具的前提是,启动Node脚本时就加上--inspect参数。如果忘了这个参数,还能不能调试呢?
回答是可以的。首先,正常启动脚本。
$nodeapp.js然后,在另一个命令行窗口,查找上面脚本的进程号。
$psax|grepapp.js30464pts/11Sl+0:00nodeapp.js30541pts/12S+0:00grepapp.js上面命令中,app.js的进程号是30464。
接着,运行下面的命令。
$node-e'process._debugProcess(30464)'上面命令会建立进程30464与调试工具的连接,然后就可以打开调试工具了。
$kill-SIGUSR130464七、参考链接(完)
FaiChou说:
很不错的node调试入门教程
魅鬼说:
赞啊,才知道原来浏览器还能调试nodejs,牛逼的chrome,多谢阮老师!
James说:
直接用VSCODE的调试功能就行了吧,简单方便。
Simon说:
学到了,多谢阮老师!j
disguiser说:
vscode+postman很方便易用
hooyes说:
就是说加上--inspect参数,Node服务器就把源代码推向了浏览器了?
riskers说:
可以添加一个VSCode调试的说明
Passenger说:
VSCode+1
hoosin说:
阮老师,你怕不知道什么是端口
安娜说:
这,阮老师的东西,好多都是翻译呀
lveyo说:
ThelegacydebuggerhasbeendeprecatedasofNode7.7.0.Pleaseuse--inspectandInspectorinstead.看来得7.7以后才能用这个inspect
阿良良说:
推荐用vscode调试node.js代码
一别经年说:
在开发node的命令行程序时候,怎么去做调试?
cnqn说:
弄了半天,终于搞成功了。感谢
一只前端狗说:
用的什么富文本编辑器啊很美观
厌敷衍说:
xiatian说:
远程调试还是不太方便
雨寒说:
弥左拉说:
小媒体说:
看了这么多关于Node调试的,只有这篇收获最大。
唐竟成说:
没有必要在chrome中打断点,可以在js脚本里写个“debugger”,这样方便点啊。
安全上网说:
可能是我思维懒吧。总感觉Node的东西都特别复杂。
ksat说:
似水说:
vscode的调试怎么用,没用过。不知道咋玩
ycw说:
使用Chorme这种调试方法是不是只能调试Get请求?其他请求可以吗?
请问如果是其他类型的请求(post、delete)怎么调试?
杰哥说:
刚刚学到node搭建服务器,很实用啊
R说:
ndb也可以用啦
义说:
因为本地开发方便的问题,启动服务采用了pm2模块,但是又想用到node模块的inspect调试功能,有没有方法,查了一下资料,好像没看到pm2调试的方法。
敲代码的李二狗说:
非常感谢这种实用的介绍!!!另外vscode中好像不能实现ts文件的调试功能,如果可以实现,请知情人士告知一下~非常感谢
學生说:
感謝阮老師,減少摸索時間能有更多時間對開源社區做貢獻
祖安宁哥说:
fjqingyou说:
在使用node-e'process._debugProcess(30464)'进入了调试模式。在不需要再调试时,有没有办法退出调试状态?即达到关闭调试的端口、不再接受调试请求?
joe说:
找来找去,花个几个小时google,最后还是发现大佬您给了答案,跪谢!