之前写过node断点调试。目前主要有三种方式,通过node内置的调试工具,通过IDE(比如vscode),通过node-inspector,三者本质上是一样的。本文重点介绍如何通过node-inspector在本地调试远程服务器上的node代码。在进入正题之前,先介绍一下三种调试方式,让新手能够理解后面的内容。至于老司机们,可以直接跳到正题。方法一:内置debug函数进入调试模式(第1行断点)nodedebugapp.js进入调试模式(第n行断点),例如第3行断点方法一:通过调试器方法二:通过某人(线路)。通过next命令执行下一步。通过cont命令跳转到下一个断点。查看某个变量的值输入repl命令后,再次输入变量名,就可以看到该变量对应的值了。如果想继续执行代码,可以按ctrl+c退出。添加/删除watch通过watch(expr)添加监控对象。通过watchers查看当前所有的监控对象。使用unwatch(expr)删除监控对象。添加手表:删除手表:进入/跳出功能(stepin,stepout)进入功能:通过step或s。跳出函数:throughoutoro。示例代码如下,假设代码运行到logger(str);行,先跳入函数,再跳出函数。varnick='chyingp';varcountry='China';varstr=nick+'livein'+country;varlogger=function(msg){console.log(msg);//此处console.log('这行将被跳过');//跳过这一行};记录器(str);//假设你在这里运行,想进入记录器方法console.log(str);示例截图如下:多文件断点通过setBreakpoint('script.js',1),sb(...),在文件的某一行加断点。反正我没有成功。..不管怎么看都是bug。..每次都要重新运行退出然后nodedebugapp.js挺烦人的。直接使用重启远程调试。比如远程机器ip是192.168.1.126,在远程机器上进入调试模式[root@localhostex]#node--debug-brkapp.jsDebugger监听5858端口然后,在本地机器上通过nodedebug192.168.1.126:5858连接到远程机器进行调试。nodedebug192.168.1.126:5858如下:?/tmpnodedebug192.168.1.126:5858connectingto192.168.1.126:5858...okbreakin/tmp/ex/app.js:1>1varLogger=require('./记录器');23Logger.info('hello');debug>nbreakin/tmp/ex/app.js:31varLogger=require('./logger');2>3Logger.info('你好');45});当然你也可以通过pid进行远程调试,这里就不举例了。参考:https://nodejs.org/api/debugg...方法二:通过IDE(vscode)首先在vscode中打开项目,然后添加调试配置。需要修改的主要是可执行文件的路径。单击代码左侧以添加断点。顺利开始调试断点,左边是变量和监控对象,右边是调试工具栏,用过c??hromedevtool的同学应该很熟悉,就不赘述了。方法三:通过node-inspector首先安装node-inspector。npminstall-gnode-inspector方法一:通过node-debug开始调试开始调试,它会自动帮你在浏览器打开调试界面。?debuggergit:(master)?node-debugapp.jsNodeInspectorv0.12.8访问http://127.0.0.1:8080/?port=5858开始调试。Debugging`app.js`Debugger监听5858端口调试接口下面,再亲切不过了。方法二:更灵活的方法步骤一:通过node-inspector?debuggergit:(master)?node-inspectorNodeInspectorv0.12.8访问http://127.0.0.1:8080/?port=5858启动NodeInspectorServer调试。第二步:通过传统方式开始调试。添加--debug-brk以便代码在第一行中断。?debuggergit:(master)?node--debug-brkapp.jsDebugger监听5858端口第三步:在浏览器中打开调试UI界面。就是第1步打印出来的地址http://127.0.0.1:8080/?port=5858成功实现的原理从上面的例子不难猜到。(不负责任的猜测)通过node--debug-brk开始调试,监听5858端口。node-inspector启动服务,监听8080端口。在浏览器中访问http://127.0.0.1:8080/?port=5858。可以看到参数port=5858。结合前面提到的node内置的远程调试功能,可以猜测,在返回UI调试界面的同时,服务内部是通过5858端口开始断点调试的。另外,从下面的截图可以看出,UI调试工具(实际上是一个网页)通过websocket与inspector服务通信。当用户在界面上进行操作时,比如设置断点,会向inspector服务发送消息,inspector服务在内部通过v8调试器实现代码的断点。可以看到,使用了v8-debug,这个还需要深挖一下。通过node-inspector调试远程代码细心的同学可能会发现node远程调试其实在上面node-inspector章节的讲解中已经涵盖了。这是一个实际的例子。假设我们的节点代码app.js运行在阿里云的服务器上,服务器ip为xxx.xxx.xxx.xxx。首先在服务器上启动node-inspector服务[root@iZ94wb7tioqZ~]#node-inspectorNodeInspectorv0.12.8访问http://127.0.0.1:8080/?port=5858开始调试。其次,传递--debug-brk参数,进入调试模式[root@iZ94wb7tioqZex]#node--debug-brkapp.jsDebugger监听5858端口最后愉快的通过ip地址在本地访问调试界面。捏起来是不是很简单。常见问题:安全限制远程调试的一个常见问题是请求被拒绝。这是服务器安全策略的限制。在这种情况下,打开端口就可以了。在我们的云主机上,默认安装了firewall-cmd,可以通过--add-port选项开启8080端口。如果机器没有安装firewall-cmd,也可以使用iptables来实现同样的功能。[root@iZ94wb7tioqZex]#firewall-cmd--add-port=8080/tcpsuccess然后就可以愉快的远程debug了。相关链接节点调试器C调试器如何工作?调试器如何工作:第2部分-断点
