简介对于开发者来说,在开发应用的过程中,为了方便开发和解决bug,往往需要借助编程语言的调试功能。一般来说,我们需要借助强大的IDE的调试功能来完成这项工作。nodejs也不例外。今天我们将详细介绍如何调试nodejs程序。开启nodejs调试还记得我们之前讲过的koa程序吗?本文将以一个简单的koa服务器程序为例,开始调试nodejs。先看下一个简单的koa服务app.js:constKoa=require('koa');constapp=module.exports=newKoa();app.use(asyncfunction(ctx){ctx.body='HelloWorld';});if(!module.parent)app.listen(3000);上面的程序打开了3000端口,建立了一个http服务。每次请求都会返回helloWorld,很简单。要运行上面的程序,我们需要执行nodeapp.js。这会执行app.js但不会启用调试。如何调试呢?我们需要添加--inspect参数:node--inspectapp.js上面的代码会开启nodejs的调试功能。让我们看一下输出:Debuggerlisteningonws://127.0.0.1:9229/88c23ae3-9081-41cd-98b0-d0f7ebceab5a如需帮助,请参阅:https://nodejs.org/en/docs/inspector结果告诉我们两个首先是调试器侦听的端口。默认会打开127.0.0.1的9229端口。并分配一个唯一的UUID以示区别。第二件事就是告诉我们nodejs使用的调试器是Inspector。Inspector是在nodejs8之后引入的,如果是在nodejs7之前,那么就是使用legacydebugger。调试安全如果调试器接入nodejs运行环境,如果有恶意攻击者,恶意攻击者可以在nodejs环境中运行任意代码。这会给我们的程序带来很大的安全隐患。所以一定要注意调试的安全性。一般来说,我们不推荐远程调试。默认--inspect绑定到127.0.0.1,只允许本地程序访问。并且任何在本地运行的程序都有调试该程序的权限。如果我们真的想把调试程序暴露给外部程序,那么我们可以指定本机的外网IP地址或者0.0.0.0(意思是任意地址,无限制),这样远程机器就可以进行远程调试了。如果我们想进行安全的远程调试呢?首先,我们需要启用本地调试:node--inspectapp.js然后我们可以建立一个ssh隧道并将本地端口9221映射到远程服务器的端口9229:ssh-L9221:localhost:9229user@remote.example.com这样我们就可以通过连接本地9221端口进行远程调试。使用WebStorm进行nodejs调试JetBrains出品的WebStorm可谓是开发nodejs的利器。WebStorm带有一个调试选项。如果开启这个选项,会在后台开启--inspect:使用WebStorm进行调试和IDEA进行java程序调试类似,这里不多做介绍。使用ChromedevTools调试使用ChromedevTools调试的先决条件是我们启用了--inspect模式。在chrome中输入chrome://inspect:我们可以看到chromeinspect的界面。如果你本地已经有一个启用了inspect的nodejs程序,你可以直接在RemoteTarget中看到它。选择你要调试的目标,点击inspect打开ChromedevTools调试工具:你可以分析程序或调试它。这里我们着重调试,所以到源码栏,添加你要调试的程序的源码:添加断点开始调试。和在chrome中调试web端js是一样的。使用node-inspect调试其实nodejs有一个内置的调试工具叫node-inspect,它是一个cli调试工具。让我们看看如何使用它。我们直接使用:nodeinspectapp.js
