乐趣区

关于node.js:nodejs的调试debug

简介

对于开发者来说,在开发应用程序的过程中,往往为了开发不便和解决 bug 须要借助于编程语言的调试性能。一般来说咱们须要借助于弱小 IDE 的调试性能来实现这项工作。nodejs 也不例外。

明天咱们来具体介绍一下如何调试 nodejs 程序。

开启 nodejs 的调试

还记得之前咱们讲到的 koa 程序吗?本文将会以一个简略的 koa 服务端程序为例,来开展 nodejs 的调试。

先看下一个简略的 koa 服务 app.js:

const Koa = require('koa');
const app = module.exports = new Koa();

app.use(async function(ctx) {ctx.body = 'Hello World';});

if (!module.parent) app.listen(3000);

下面的程序开启了 3000 端口,建设了一个 http 服务。每次申请的时候,都会返回 hello World, 十分的简略。

要想运行下面的程序,咱们须要执行 node app.js。这会执行 app.js 然而并不会开启调试性能。

怎么进行调试呢?

咱们须要加上 –inspect 参数:

node --inspect app.js

下面的代码将会开启 nodejs 的调试性能。

咱们看下输入后果:

Debugger listening on ws://127.0.0.1:9229/88c23ae3-9081-41cd-98b0-d0f7ebceab5a
For help, see: https://nodejs.org/en/docs/inspector

后果通知了咱们两件事件,第一件事件就是 debugger 监听的端口。默认状况下将会开启 127.0.0.1 的 9229 端口。并且调配了一个惟一的 UUID 以供辨别。

第二件事件就是通知咱们 nodejs 应用的调试器是 Inspector。

Inspector 是 nodejs 8 之后引入的,如果是在 nodejs 7 之前,那么应用的是 legacy debugger。

调试的安全性

如果 debugger 连贯到了 nodejs 运行环境中,如果有歹意攻击者的话,这个歹意攻击者能够在 nodejs 环境中运行任意代码。这会给咱们的程序带来很大的安全隐患。

所以咱们肯定要留神调试的安全性。一般来说,咱们不倡议进行近程调试。

默认状况下 –inspect 绑定的是 127.0.0.1,这样就只容许本地程序拜访。并且任何本地运行的程序都有权限进行该程序的调试。

如果咱们真的想将 debug 程序裸露给内部程序的话,那么能够指明本机的外网 IP 地址或者 0.0.0.0(示意任何地址,无限度),这样近程机子就能够进行近程调试了。

如果咱们想进行平安的 remote debug 该怎么解决呢?

首先,咱们要开启本地的 debug:

node --inspect app.js

而后咱们能够搭建一个 ssh 隧道,将本地的 9221 端口映射到近程服务器的 9229 端口:

ssh -L 9221:localhost:9229 user@remote.example.com

这样咱们就能够通过连贯本地的 9221 端口,进行近程调试了。

应用 WebStorm 进行 nodejs 调试

JetBrains 出品的 WebStorm 堪称是开发 nodejs 的利器,WebStorm 自带有 debug 选项,如果开启该选项,则会在后盾开启 –inspect:

应用 WebStorm 来进行调试和应用 IDEA 来进行 java 程序调试相似,这里就不多介绍了。

应用 Chrome devTools 进行调试

应用 Chrome devTools 进行调试的前提是咱们曾经开启了 –inspect 模式。

在 chrome 中输出 chrome://inspect:

咱们可看到 chrome inspect 的界面,如果你本地曾经有开启 inspect 的 nodejs 程序的话,在 Remote Target 中就能够间接看到。

选中你要调试的 target,点击 inspect,即可开启 Chrome devTools 调试工具:

你能够对程序进行 profile,也能够进行调试。

这里咱们关注的是调试,所以转到 source 一栏,增加你要调试的程序的源代码:

退出断点即可开始调试了。和在 chrome 中调试 web 端的 js 是一样的。

应用 node-inspect 来进行调试

其实 nodejs 有一个自带的调试工具,叫做 node-inspect,这是一个 cli 的调试工具。咱们看一下怎么应用。

咱们间接应用:

node inspect app.js

< Debugger listening on ws://127.0.0.1:9229/f1c64736-47a1-42c9-9e9e-f2665073d3eb
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in app.js:1
> 1 const Koa = require('koa');
  2 const app = module.exports = new Koa();
  3 
debug> 

node inspect 做了两件事件,第一件事件就是生成子程序去运行 node –inspect app.js, 第二件事件就是在主程序中运行 CLI 调试窗口。

这个 CLI 调试程序为咱们提供了一些十分有用的命令:

  1. Stepping
  • cont, c: 继续执行
  • next, n: Step 到下一步
  • step, s: Step in
  • out, o: Step out
  • pause: 暂停运行的代码
  1. Breakpoints
  • setBreakpoint(), sb(): 在以后行设置断点
  • setBreakpoint(line), sb(line): 在指定的行设置断点
  • setBreakpoint(‘fn()’), sb(…): 在指定的 function 中设置断点
  • setBreakpoint(‘script.js’, 1), sb(…): 在指定的脚本文件中设置断点
  • clearBreakpoint(‘script.js’, 1), cb(…): 从文件中革除断点
  1. Information
  • backtrace, bt: 打印以后 execution frame 的 backtrace 信息
  • list(5): 列出源代码前后的 5 行
  • watch(expr): 增加监听表达式
  • unwatch(expr): 删除监听表达式
  • watchers: 列出所有的 watchers
  • repl: 关上 repl 表达式
  • exec expr: 执行表达式

通过下面的命令,咱们能够在 CLI 中进行比较复杂的调试流动。

其余的 debug 客户端

除了下面咱们讲到的几个之外,咱们还能够应用 vscode,Visual Studio,Eclipse IDE 等来进行 nodejs 的调试,这里就不一一具体介绍了。

感兴趣的敌人能够自行摸索。

本文作者:flydean 程序那些事

本文链接:http://www.flydean.com/nodejs-debug/

本文起源:flydean 的博客

欢送关注我的公众号:「程序那些事」最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!

退出移动版