WebStorm3.0 webstorm断点调试nodeejs 怎么添加断点

使用Chrome调试NodeJS脚本 - 推酷
使用Chrome调试NodeJS脚本
1.首先在命令行执行npm以全局模式安装node-inspector插件:
npm install -g node-inspector
2.然后用node命令执行需要调试的脚本,但是要加上–debug-brk参数,例如:node –debug-brk=5858 test.js
脚本现在就已经断点在了第一行,并且在等待5858端口的监听程序启动。
3.重启一个命令行窗口(注意是重启一个新的窗口!),然后执行:node-inspector
4.根据提示,在谷歌浏览器里输入地址就可以开始调试了:http://127.0.0.1:8080/debug?port=5858
关于谷歌浏览器调试技巧,可以参考
写在最后:这种调试方式只建议给使用纯文本编辑器写NodeJS脚本的开发者。更加方便的方式推荐直接使用WebStorm开发。有代码提示,也可以在IDE里直接断点调试。在WebStorm里创建一个普通工程,开始写js脚本,当你引用到nodejs 提供的API时,webstorm会提示你下载nodejs源码包,照提示一步一步操作即可。调试直接在js脚本上右键点“Debug xx.js”。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致posts - 301, comments - 0, trackbacks - 0, articles - 0
使用得心应手的IDE来开发应用程序,可以使我们的工作事半功倍。而调试则更可以让我们准确的定位BUG,发现问题。本文讲述如何使用&&这个怪兽级JavaScript IDE来调试&。如果你更喜欢&&等其他IDE,希望本文也可以有一些帮助。
首先我们需要知道,NodeJS应用程序可以在运行命令中加入--debug=5858参数,可以使得NodeJS程序监听本地5858端口,并开启调试模式。
其次,Pomelo的运行原理是:pomelo start时,启动了master服务器,然后其先读取配置文件,再启动由game-server/config/servers.json文件中经过配置的各个服务器进程。其中,你看到的id、host、port等等都是子服务器的启动参数,这些参数都会放到启动命令行中app.js的后面。
再次,Pomelo的设计人员最初已经考虑到了直接在node后app.js前添加参数的简便方法:在服务器配置文件中,配置条目中插入"args": " 你想要的参数 "后,便可以你指定的参数运行node。
修改配置以启动带有调试模式的服务器
一、打开文件
打开game-server/config/servers.json。为了便于便于开发,我们将服务器数目缩减至每功能1个运行实例。这样你就会看到:
二、修改并保存
我们对gate服务器的负载分配原理产生了兴趣,想要调试它。这时,我们只需要在{"id": "gate-server-1", ...的行末,花括号}前,插入下面代码, "args": " --debug=32312 "。使gate服务器的配置组变成这样:
当再次启动服务器时,master服务器会读取新的配置,并以这个配置运行gate-server-1服务器。
而该服务器的进程,会监听32312端口,以便调试器连接。将端口设置的偏高是为了减少端口冲突的可能性。开发过程中,如果启动后发现有报ADDRINUSE(端口已被占用)的错误,请使用pomelo kill --force杀光Pomelo程序,并调整此处的端口值。
配置IDE的调试器
一、打开Edit Configurations...对话框
可以从运行、调试按钮前面的小三角进入,或者从工具栏中选择Run&-&Edit Configurations...。
二、新增一条Node.js Remote Debug
Name栏名字可以随意起,但最好选择明确易懂的。然后选中Single instance only,这样只会启动一个调试器。而不会有很多相同的调试器都连到后面指定的调试端口。
下面的Host写本地127.0.0.1,Debug Port填入刚刚上面指定的端口号,我这里用32312,与前面配置文件中的完全一致。Local directory指定当前的game-server/app.js目录所在目录。
附:运行配置
当然你可能已经注意到了,这里的Configurations不仅包含调试,还包括运行配置。运行配置方法跟一般的NodeJS程序配置方法相同。NodeJS新人可以参考图片中配置。注意被框的内容。
一、分别启动Web、Chat服务器
如果你有做过运行Chat和Web服务器的配置,现在就可以从运行、调试按钮前面的配置下拉菜单中,分别选择Chat以及Web后,点击[►]运行按钮。运行后,可以从IDE下方的控制台输出中查看日志输出,可以检查一下这两个服务器的启动是否成功。如果出现红字,多半表示启动失败。你可以根据提示的报错信息Google或者&&,以查找解决方案。
二、连接调试器
再从配置下拉菜单中选择刚刚的调试配置gate study,之后点击[☼]调试按钮。检查窗口下方的Debugger,可以看到有提示说Connected to 127.0.0.1:32312。
三、设置断点
由于我们想调试gate服务器中,与connector分配相关的代码,所以在IDE中,打开app/servers/gate/handler/gateHandler.js。定位到&,在此处下一个断点。
浏览器中打开&&会看到&Chat of Pomelo标题的登录页面。填入两栏表单后,点击【JOIN】按钮。
此时,页面将不会做出任何反应,是因为服务器端的代码被断点拦下了。而IDE会因为调试器而被激活:
下方窗口中,除了常规调试用到的StepOver、StepInto、StepOut等必须功能外,有很多好用的工具,比如即时表达式求值、切换异常发生时自动中断……这里就不深入探讨了。
可用的聊天应用
Web服务器启动成功后我们可以看到它提示说可以访问http://127.0.0.1:3001/index.html了。但我们都知道127.0.0.1是本机IP地址,如果真正要跟其他人“聊天”的话,这样是不行的。因为别人不一定能打开127.0.0.1:3001,即便打开了,也无法跟你在一起聊天。
所以将这里的127.0.0.1换成你自己电脑的可被网络上其他成员访问到的地址,我这里的地址是192.168.1.61。OK,我可以在浏览器里打开http://192.168.1.61:3001/index.html,因为本机调试没有任何问题,所以我也信心满满的将这个地址告诉了与我同一网络的同事。
这时出现了一个问题,我自己可以登录到聊天界面,而其他任何人都无法登录。
根据其他人的浏览器Console输出,可以看到他们都连接一下192.168.1.61:3014端口后,又去连接127.0.0.1:3050,所以他们才无法登录的。
而3014端口刚好是gate服务器,问题就出在这里,还是继续调试一下吧。
在经过一番断点切换后,可以发现gateHandler.queryEntry最后跑到了&&的&next函数上。var res = dispatcher.dispatch(uid, connectors);
next(null, {
code: 200,
host: res.host,
port: res.clientPort
可以看到,返回内容的&host&使用了res.host,res又来自connectors,connectors来自配置文件。
而game-server/config/servers.json下connector服务器的&&,可以清楚的看见"host":"127.0.0.1"。
源头找到了,立刻将这里的127.0.0.1全部替换成我本机192.168.1.61。并且重启Chat服务器。
同事再刷新访问的时候,便可以登录进来了。
细心的人或许发现,调试器连接的IP地址,是127.0.0.1,但你或许在想,既然是叫"Remote Deubgger",应该可以连接除127.0.0.1以外的IP吧? 我也是这么想的。但是,在不借助其他工具的情况下,不能办到。
就是说,不借助一个代理工具,是没办法连接到除了127.0.0.1地址的调试端口的。
你可以借助NodeJS官方&&文章结尾(Ctrl-F后,搜索"You probably noticed")的方法及代码,来完成一个代理工具。以便调试部署在远端服务器上运行的代码。
同时这篇文章也是 Eclipse 的调试指导文章。
随笔分类(259)
随笔档案(301)
积分与排名开始学nodejs —— 调试篇 - 推酷
开始学nodejs —— 调试篇
新学习一种技术,肯定会遇到很多坑,我们需要找到这些坑,弄清楚这些坑出现的原因和其中的原理。这种操作就叫做调试。
程序调试的方法和工具多种多样,在这里我总结一下我在学习nodejs的过程中,学到的和用到的调试方法。
在JavaScript代码中直接console.log,可以在控制台中打印信息。但是这样的功能太单调,项目中模块很多,功能繁杂,如果没有一个约定好的console.log方法,很容易就导致打印的信息十分杂乱,可读性很差。
nodejs有一个debug模块,提供:
定义log模块,选择特定模块log输出
模块文字颜色高亮
log时间记录
输出log到文件等功能
npm init、npm install debug --save &新建一个nodejs项目并安装debug模块
var debug=require(&debug&)(&mydebug:http&),
work=require(&./work&),
http=require(&http&);
http.createServer(function(req,res){
debug(req.method + ' ' + req.url);
res.end('hello\n');
}).listen(3000,function(){
debug(&listening&);
var debug=require(&debug&)(&mydebug:work&);
setInterval(function(){
debug(&doing some work @ %s —— %s&,new Date().getTime(),&with supervisor&);
上面两个文件中分别创建了 mydebug:http &和 mydebug:work 两个log模块,在启动项目的时候可以配置要打印的log模块,这个配置是支持通配符匹配的
在linux中启动:
DEBUG=mydebug:* node app.js
在windows中启动
set DEBUG=mydebug:* & node app.js
这样就可以看到不同模块的日志打印了,同时也可以看到日志输出时间。
在浏览器中访问 localhost:3000 也可以看到打印出的访问信息
此外debug模块还提供把日志输出到文件的功能
set DEBUG=mydebug:*
node app.js mydebug:work& debug.log
nodejs debug模块文档:
光有log还不够,当程序出现问题时通过log可以定位到错误位置,但是当我们想查看错误现场的变量时,log就无能为力了,一般情况下我们不会把所有的变量都打印出来。此时就需要断点的功能了,在程序里边打上断点,直接定位到错误位置,分析错误现场确认错误原因。
nodejs内部提供一个debug机制,可以让程序进入debug模式,供开发者一步一步分析代码发现问题。
共有3中启动参数可以让程序进入debug模式
node debug app.js
node --debug app.js
node --debug-brk app.js
3种模式在调试形式上有一定区别。
node debug app.js
1.这种方式启动程序,程序会进入debug模式,并运行到启动文件的第1行就停止,等待开发者下发往下走的命令
2.这种方式启动程序,直接在当前cmd中进入调试模式
node --debug app.js
1.这种方式启动程序,程序会进入debug模式,并运行完所有代码。这种启动方式往往用于程序启动的过程中不需要调试,通过触发时间进入回调函数的情况,比如在某个http请求中打上断点,等待客户端访问后进入断点
2.这种方式启动程序,会开启一个TCP的端口监听,在本cmd中不进入调试模式,需要另外开启终端用node debug 命令连接调试端口
命令为 node debug localhost debug端口
或者 & node debug p node进程id
node --debug-brk app.js
1.这种方式启动程序,程序会进入debug模式,但是不会运行代码,直到有一个终端连接到了debug端口,才开始执行代码,并在第1行进入断点
2.这种方式启动程序,会开启一个TCP的端口监听,在本cmd中不进入调试模式,需要另外开启终端用node debug 命令连接调试端口
进入debug模式后,可以通过一些命令来设置断点、取消断点以及控制程序执行流程
命令文档:
流程控制相关
cont ,& c &- Continue execution
next ,& n &- Step next
step ,& s &- Step in
out ,& o &- Step out
pause &- Pause running code (like pause button in Developer Tools)
断点设置取消相关
setBreakpoint() ,& sb() &- Set breakpoint on current line
setBreakpoint(line) ,& sb(line) &- Set breakpoint on specific line
setBreakpoint('fn()') ,& sb(...) &- Set breakpoint on a first statement in functions body
setBreakpoint('script.js', 1) ,& sb(...) &- Set breakpoint on first line of script.js
clearBreakpoint('script.js', 1) ,& cb(...) &- Clear breakpoint in script.js on line 1
变量查看相关
backtrace ,& bt &- Print backtrace of current execution frame
list(5) &- List scripts source code with 5 line context (5 lines before and after)
watch(expr) &- Add expression to watch list
unwatch(expr) &- Remove expression from watch list
watchers &- List all watchers and their values (automatically listed on each breakpoint)
repl &- Open debugger's repl for evaluation in debugging script's context
repl模式下可以输入变量名查看变量内容
node debug
从第一行代码开始进入断点,命令n进入下一行
node --debug
cmd1 &开启调试端口
cmd2 & 连接调试端口
设置断点,取消断点
cmd1 过了一分钟才继续打印
用进程id的方式连接调试模块
上图可以看到pid为4436
调试相关的工具和模块
上面的调试过程还是略显麻烦,有一些工具和node模块可以用来辅助调试。
supervisor
supervisor是一个node模块,用来启动node项目。
supervisor可以监控一些文件,当这些文件发生变化时自动刷新程序,不用重新启动node程序。
当程序崩溃时,supervisor会重新启动程序。
还有其他的一些配置,可以在supervisor文档中看到&
安装supervisor
npm install -g supervisor
监控work.js的变化并启动node程序
把work中的debug信息修改一下
在任务管理器中结束app.js的node进程,可以看到supervisor自动重启了app.js的进程
webstorm提供了比较方便的debug工具
在菜单中 &run-debug-app.js
可以直接在行号的地方点击,打上断点
浏览器访问 localhost:3000,进入断点
可以看到webstorm提供的一些调试工具
实际上webstorm的调试功能也是基于 --debug-brk来实现的,使用了63797端口来调试
node-inspector
如果不喜欢webstorm的调试工具,还可以使用我们熟悉的chrome调试工具来调试node代码,不过需要安装一个node模块——node-inspector
npm install -g node-inspector
安装完成后,开启一个node调试端口 12345
然后新开一个cmd,开始一个node-inspector调试服务,连接到刚刚开启的调试端口
根据提示访问地址,即可使用我们比较熟悉的chrome的调试工具来调试nodejs代码
调试的技巧有很多,很多细节问题都需要不同的调试技巧来实现,以后用到新的了再补充吧~
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 webstorm 10 断点调试 的文章

 

随机推荐