Node调试工具使用详解

这次给大家带来Node调试工具使用详解,Node调试工具的注意事项有哪些,下面就是实战案例,一起来看一下。

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.jsconst 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 了。

Node调试工具使用详解

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

Node调试工具使用详解

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

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

Node调试工具使用详解

三、调试工具窗口

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

它主要有四个面板。

Console:控制台

Memory:内存

Profiler:性能

Sources:源码

Node调试工具使用详解

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

四、设置断点

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

Node调试工具使用详解

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

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

登录后复制

Node调试工具使用详解

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

Node调试工具使用详解

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

Node调试工具使用详解

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

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

Node调试工具使用详解

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

Node调试工具使用详解

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

Node调试工具使用详解

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

五、调试非服务脚本

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

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

登录后复制

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

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

Node调试工具使用详解

代码放在 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.js30541 pts/12  S+   0:00 grep app.js

登录后复制

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

接着,运行下面的命令。

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

登录后复制

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

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

$ kill -SIGUSR1 30464

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

如何实现vue-router中query动态传参

vue+storejs获取数据使用说明

以上就是Node调试工具使用详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2764495.html

(0)
上一篇 2025年3月8日 10:31:49
下一篇 2025年3月8日 10:32:05

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS模拟实现哈希表及应用详解

    这篇文章主要介绍了js模拟实现哈希表及应用,结合实例形式分析了javascript模拟实现哈希表的步骤、相关操作技巧与使用方法,需要的朋友可以参考下 本文实例讲述了JS模拟实现哈希表及应用。分享给大家供大家参考,具体如下: 在算法中,尤其是…

    2025年3月8日
    200
  • vue地区选择组件教程详解

    这篇文章主要介绍了vue地区选择组件主要用于全国地区数据的操作,包括省,市,区三级联动,地区数据的添加和删除,本文重点给大家介绍vue地区选择组件教程详解,需要的朋友参考下吧 概述 主要用于全国地区数据的操作,包括省,市,区三级联动,地区数…

    编程技术 2025年3月8日
    200
  • vue mint-ui tabbar变组件使用

    这篇文章主要介绍了vue mint-ui tabbar变组件使用方法及实例代码,非常不错具有参考借鉴价值,需要的朋友可以参考下 新建tabbar.vue                  主页                    积分商城…

    编程技术 2025年3月8日
    200
  • node实现的爬虫功能

    这篇文章主要介绍了node实现的爬虫功能,结合实例形式分析了nodejs实现爬虫功能的步骤与相关操作技巧,需要的朋友可以参考下 本文实例讲述了node实现的爬虫功能。分享给大家供大家参考,具体如下: node是服务器端的语言,所以可以像py…

    2025年3月8日
    200
  • 关于Node.js时间循环的使用

    Node.js的使用性能较好,所以在使用中会经常见到,所以本文将会详细的讲解。 Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。 node.js 的每一个 api 都是异步的,并作为一个独立线程运行,使用…

    编程技术 2025年3月8日
    200
  • es6的class特性使用详解

    这次给大家带来es6的class特性使用详解,es6的class特性使用注意事项有哪些,下面就是实战案例,一起来看一下。 javaScript 语言中,生成实例对象的传统方法是通过构造函数,与传统的面向对象语言(比如 C++ 和 Java)…

    编程技术 2025年3月8日
    200
  • JS三种加载方法使用总结

    这次给大家带来JS三种加载方法使用总结,JS三种加载方法使用的注意事项有哪些,下面就是实战案例,一起来看一下。 一:同步加载 我们平时使用的最多的一种方式。 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止后续的解析,只有当当前加载完成…

    编程技术 2025年3月8日
    200
  • JS随机生成数与序列方法详解

    这次给大家带来JS随机生成数与序列方法详解,JS随机生成数与序列的注意事项有哪些,下面就是实战案例,一起来看一下。 •1.Math.random(); 结果为0-1间的一个随机数(包括0,不包括1) •2.Math.floor(num); …

    编程技术 2025年3月8日
    200
  • JS加载jquery.js步骤详解

    这次给大家带来JS加载jquery.js步骤详解,JS加载jquery.js的注意事项有哪些,下面就是实战案例,一起来看一下。 最近有一个需求: 1.在一个html中只能引入一个JS文件 不能有JS代码和其他JS文件的引入; 2.这个JS文…

    2025年3月8日
    200
  • js三种使用方式案列详解

    这次给大家带来js三种使用方式案列详解,js三种使用方式的注意事项有哪些,下面就是实战案例,一起来看一下。 1、行内js:js不单独写出 js使用方式1:行内js 登录后复制 2、内部js:script里的程序整个页面都可以用 js使用方式…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论