浅谈Node 调试工具入门教程

 更新时间:2018年03月20日 09:29:50   作者:阮一峰  
这篇文章主要介绍了浅谈Node 调试工具入门教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

JavaScript 程序越来越复杂,调试工具的重要性日益凸显。客户端脚本有浏览器,Node 脚本怎么调试呢?

2016年,Node 决定将 Chrome 浏览器的"开发者工具"作为官方的调试工具,使得 Node 脚本也可以使用图形界面调试,这大大方便了开发者。

本文介绍如何使用 Node 脚本的调试工具。

一、示例程序

为了方便讲解,下面是一个示例脚本。首先,新建一个工作目录,并进入该目录。

$ mkdir debug-demo
$ cd debug-demo

然后,生成 package.json 文件,并安装Koa 框架和 koa-route 模块。

$ npm init -y
$ npm install --save koa koa-route

接着,新建一个脚本 app.js ,并写入下面的内容。

// app.js
const Koa = require('koa');
const router = require('koa-route');

const app = new Koa();

const main = ctx => {
 ctx.response.body = 'Hello World';
};

const welcome = (ctx, name) => {
 ctx.response.body = 'Hello ' + name;
};

app.use(router.get('/', main));
app.use(router.get('/:name', welcome));

app.listen(3000);
console.log('listening on port 3000');

上面代码是一个简单的 Web 应用,指定了两个路由,访问后会显示一行欢迎信息。如果想详细了解代码的详细含义,可以参考Koa 教程。

二、启动开发者工具

现在,运行上面的脚本。

$ node --inspect app.js

上面代码中, --inspect 参数是启动调试模式必需的。这时,打开浏览器访问 http://127.0.0.1//3000,就可以看到 Hello World 了。

接下来,就要开始调试了。一共有两种打开调试工具的方法,第一种是在 Chrome 浏览器的地址栏,键入 chrome://inspect 或者 about:inspect ,回车后就可以看到下面的界面。

在 Target 部分,点击 inspect 链接,就能进入调试工具了。

第二种进入调试工具的方法,是在 http://127.0.0.1//3000 的窗口打开"开发者工具",顶部左上角有一个 Node 的绿色标志,点击就可以进入。

三、调试工具窗口

调试工具其实就是"开发者工具"的定制版,省去了那些对服务器脚本没用的部分。

它主要有四个面板。

  1. Console:控制台
  2. Memory:内存
  3. Profiler:性能
  4. Sources:源码

这些面板的用法,基本上跟浏览器环境差不多,这里只介绍 Sources (源码)面板。

四、设置断点

进入 Sources 面板,找到正在运行的脚本 app.js

在第11行(也就是下面这一行)的行号上点一下,就设置了一个断点。

ctx.response.body = 'Hello ' + name;

这时,浏览器访问 http://127.0.0.1:3000/alice ,页面会显示正在等待服务器返回。切换到调试工具,可以看到 Node 主线程处于暂停(paused)阶段。

进入 Console 面板,输入 name,会返回 alice。这表明我们正处在断点处的上下文(context)。

再切回 Sources 面板,右侧可以看到 Watch、Call Stack、Scope、Breakpoints 等折叠项。打开 Scope 折叠项,可以看到 Local 作用域和 Global 作用域里面的所有变量。

Local 作用域里面,变量 name 的值是 alice ,双击进入编辑状态,把它改成 bob

然后,点击顶部工具栏的继续运行按钮。

页面上就可以看到 Hello bob 了。

命令行下,按下 ctrl + c,终止运行 app.js

五、调试非服务脚本

Web 服务脚本会一直在后台运行,但是大部分脚本只是处理某个任务,运行完就会终止。这时,你可能根本没有时间打开调试工具。等你打开了,脚本早就结束运行了。这时怎么调试呢?

$ node --inspect=9229 -e "setTimeout(function() { console.log('yes'); }, 30000)"

上面代码中, --inspect=9229 指定调试端口为 9229,这是调试工具默认的通信端口。 -e 参数指定一个字符串,作为代码运行。

访问 chrome://inspect ,就可以进入调试工具,调试这段代码了。

代码放在 setTimeout 里面,总是不太方便。那些运行时间较短的脚本,可能根本来不及打开调试工具。这时就要使用下面的方法。

$ node --inspect-brk=9229 app.js

上面代码中, --inspect-brk 指定在第一行就设置断点。也就是说,一开始运行,就是暂停的状态。

六、忘了写 --inspect 怎么办?

打开调试工具的前提是,启动 Node 脚本时就加上 --inspect 参数。如果忘了这个参数,还能不能调试呢?

回答是可以的。首先,正常启动脚本。

$ node app.js

然后,在另一个命令行窗口,查找上面脚本的进程号。

$ ps ax | grep app.js 

30464 pts/11  Sl+  0:00 node app.js
30541 pts/12  S+   0:00 grep app.js

上面命令中, app.js 的进程号是 30464

接着,运行下面的命令。

$ node -e 'process._debugProcess(30464)'

上面命令会建立进程 30464 与调试工具的连接,然后就可以打开调试工具了。

还有一种方法,就是向脚本进程发送 SIGUSR1 信号,也可以建立调试连接。

$ kill -SIGUSR1 30464

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • node.js中的fs.closeSync方法使用说明

    node.js中的fs.closeSync方法使用说明

    这篇文章主要介绍了node.js中的fs.closeSync方法使用说明,本文介绍了fs.closeSync方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • 关于Yarn的使用及说明

    关于Yarn的使用及说明

    这篇文章主要介绍了关于Yarn的使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 详解Nodejs中自动化浏览器操作神器Puppeteer的使用

    详解Nodejs中自动化浏览器操作神器Puppeteer的使用

    Puppeteer是一个JavaScript库,它提供了一种方式来通过DevTools协议控制无头浏览器,本文主要为大家介绍了Puppeteer的主要特性和使用方法,感兴趣的可以了解下
    2024-01-01
  • 关于node.js版本npm -v报错问题的解决方法

    关于node.js版本npm -v报错问题的解决方法

    最近工作中遇到了些问题,这里总结下,下面这篇文章主要给大家介绍了关于node.js版本npm -v报错问题的解决方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • nodejs和npm版本不匹配报错的解决方法

    nodejs和npm版本不匹配报错的解决方法

    当公司要求使用固定nodejs的版本时,自己不小心更新了npm,就会导致npm和nodejs不匹配,下面这篇文章主要给大家介绍了关于nodejs和npm版本不匹配报错的解决方法,需要的朋友可以参考下
    2023-04-04
  • nodejs 递归拷贝、读取目录下所有文件和目录

    nodejs 递归拷贝、读取目录下所有文件和目录

    这篇文章主要介绍了nodejs 递归拷贝、读取目录下所有文件和目录,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • nodejs个人博客开发第二步 入口文件

    nodejs个人博客开发第二步 入口文件

    这篇文章主要为大家详细介绍了nodejs个人博客开发的入口文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • node.js中的fs.existsSync方法使用说明

    node.js中的fs.existsSync方法使用说明

    这篇文章主要介绍了node.js中的fs.existsSync方法使用说明,本文介绍了fs.existsSync方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • VSCode使用npm的详细步骤

    VSCode使用npm的详细步骤

    为了避免造轮子,我们有时候会用到其他人的劳动成果,比如一些优秀的框架,比如Express,我们直接使用NPM下载下来就可以用了,降低开发成本和时间,这篇文章主要给大家介绍了关于VSCode使用npm的详细步骤,需要的朋友可以参考下
    2022-09-09
  • node.js实现回调的方法示例

    node.js实现回调的方法示例

    这篇文章主要介绍了node.js实现回调的方法,结合实例形式分析了node.js实现向回调函数传递参数、闭包的使用及链式回调相关操作技巧,需要的朋友可以参考下
    2017-03-03

最新评论