We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
node如何断点调试?运行时?多进程时?
https://nodejs.org/api/debugger.html
请先阅读完上述官方调试章节的api文档。文档中主要介绍了两种启用方式
--debug
--inspect
方法:node --debug app.js
node --debug app.js
--debug是node提供的最基本方式,启动后会默认开启5858端口,然后就可以侦听该端口进行调试了。尝试访问下5858提供的侦听端口服务把:http://localhost:5858
5858
之后,侦听该端口,进行调试,方式及工具很多,官方只提供了命令行方式,
node debug -p <pid>
node debug <URI>
备注:
node debug index.js 其实是两条命令的缩写 node --debug app.js // 假设其pid为10010 node debug -p 10010
node debug index.js 其实是两条命令的缩写
这里不细讲,重点讲基于该端口的社区方案:
社区提供了很多其他选择,列下比较知名的两个:
这里重点介绍下node-inspector
node-inspector
安装很简单:npm install -g node-inspector
npm install -g node-inspector
使用也非常简单:node-debug app.js
node-debug app.js
但,node-debug app.js其实包含了三个过程
http://127.0.0.1:8080/?port=5858
总结一下前两者:
方法:node --inspect app.js
node --inspect app.js
其实是把社区的方案直接内置到nodejs中了,不需要安装node-inspector即可以直接用Chrome DevTools进行可视化界面调试。
此方案直到nodejs v6.3才被node内部支持,具体纳入过程可以参见:https://nodesource.com/blog/the-10-key-features-in-node-js-v6-lts-boron-after-you-upgrade
纳入后的调用及部署变得简单,对比如下:
debug原理就是上述两种,一些IDE如Webstorm的内置的debug调试也是基于上述原理,采用方式一进行, 只要配置好启动/入口JS文件即可:
方式一
启动/入口JS
Webstorm有两个button, 分别为启动和调试
--debug-brk=55077
--expose_debug_as=v8debug
由于IDE的高度集成,使得调试体验非常好:
已经启动的服务器不想停掉,有办法进行调试吗?
USR1
kill -s USR1 <pid>
--inspect方式不会有问题(缺点不提了),因为会对每个进程单独开启一个debug链接,但传统--debug就麻烦了。
只有一条:请尽可能降维为单进程后再调试。当然,多进程Debug是有方法的,只不过比较麻烦,可以参见:
https://strongloop.com/strongblog/whats-new-nodejs-v0-12-debugging-clusters/
另外,针对eggjs,如何进行调试呢?因为即使开发模式,egg也会启动主进程、worker进程及agent 3个进程。比较简单,找出woker进程的pid,运行时设置为--debug模式。其他多进程也可以按照这种方式手动设置后debug。
ps -ef | grep app_worker.js // 找到pid kill -s USR1 [pid]
然后便可以开启node-inspector,在浏览器中Debug了。
界面化调试偶尔用用即可,不要过于依赖,养成打印日志,通过日志定位、排查问题才是王道。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
node如何断点调试?运行时?多进程时?
请先阅读完上述官方调试章节的api文档。文档中主要介绍了两种启用方式
--debug
方式启用调试,命令行--inspect
方式启用调试,界面化方式一:debug
官方方案
方法:
node --debug app.js
--debug
是node提供的最基本方式,启动后会默认开启5858
端口,然后就可以侦听该端口进行调试了。尝试访问下5858提供的侦听端口服务把:http://localhost:5858之后,侦听该端口,进行调试,方式及工具很多,官方只提供了命令行方式,
node debug -p <pid>
或node debug <URI>
备注:
这里不细讲,重点讲基于该端口的社区方案:
社区扩展
社区提供了很多其他选择,列下比较知名的两个:
这里重点介绍下
node-inspector
安装很简单:
npm install -g node-inspector
使用也非常简单:
node-debug app.js
但,
node-debug app.js
其实包含了三个过程node-inspector
启动8080web服务,访问后是一个CHROME_DEV_TOOLS界面node --debug app.js
这个是最基本、核心的,启用node的--debug
模式,暴露默认5858端口。http://127.0.0.1:8080/?port=5858
即可进行调试,node-inspector会通过socket与5858建立长连接,进行调试。总结一下前两者:
方式二:inspect
方法:
node --inspect app.js
其实是把社区的方案直接内置到nodejs中了,不需要安装
node-inspector
即可以直接用Chrome DevTools进行可视化界面调试。此方案直到nodejs v6.3才被node内部支持,具体纳入过程可以参见:https://nodesource.com/blog/the-10-key-features-in-node-js-v6-lts-boron-after-you-upgrade
纳入后的调用及部署变得简单,对比如下:
通过IDE进行debug
debug原理就是上述两种,一些IDE如Webstorm的内置的debug调试也是基于上述原理,采用
方式一
进行, 只要配置好启动/入口JS
文件即可:Webstorm有两个button, 分别为启动和调试
启动/入口JS
启动/入口JS
--debug-brk=55077
--expose_debug_as=v8debug
由于IDE的高度集成,使得调试体验非常好:
关于运行时调试
已经启动的服务器不想停掉,有办法进行调试吗?
--debug
方式有, 对具体node进程传入USR1
信号即可:kill -s USR1 <pid>
--inspect
方式缺乏,有望在node v8.0提供,参见:Debug already running process using v8-inspector?关于多进程
--inspect
方式不会有问题(缺点不提了),因为会对每个进程单独开启一个debug链接,但传统--debug
就麻烦了。只有一条:请尽可能降维为单进程后再调试。当然,多进程Debug是有方法的,只不过比较麻烦,可以参见:
另外,针对eggjs,如何进行调试呢?因为即使开发模式,egg也会启动主进程、worker进程及agent 3个进程。比较简单,找出woker进程的pid,运行时设置为
--debug
模式。其他多进程也可以按照这种方式手动设置后debug。然后便可以开启
node-inspector
,在浏览器中Debug了。最后
界面化调试偶尔用用即可,不要过于依赖,养成打印日志,通过日志定位、排查问题才是王道。
The text was updated successfully, but these errors were encountered: