调试 Node.js

调试器

调试器是一种软件工具,用于通过分析方法观察和控制程序的执行流

  • 设计目标:帮助找出 bug 的根本原因,并帮助你解决它
  • 工作方式:将程序托管在自己的执行进程中或者作为附加到正在运行的程序(例如 Node.js)的独立进程运行
  • 主要好处:可以监视程序运行,可以一次跟踪一个程序代码行的执行

几乎所有调试器所具有的两个最重要的功能是:

  • 控制程序执行
  • 观察程序的状态

调试是一个多阶段的过程,通常遵循以下步骤:

  • 识别程序中的 bug
  • 查找 bug 在代码中的位置
  • 分析 bug 发生的原因
  • 修复 bug
  • 验证修复是否有效

使用 Node.js 内置调试器进行调试

在 Node.js 程序中发现错误后,你面临的第一个挑战就是在代码中找到错误所在的位置

  • 使用断点,可以使程序正常运行,直到到达怀疑错误所在的关键代码部分
  • 有一种通用的方法可以强制任何 JavaScript 调试器在给定的点暂停,使用 debugger 语句
function testBasket(m){

    debugger;   // // 设置断点

    const basket = getCurrentBasket();
basket.add(m);
}

调试器拥有对执行环境的完全访问权限

  • 抱有恶意者可以使用它在你的 Node.js 进程中注入任意代码,必须启用一种称为检查器模式的特殊模式才能允许调试
  • 使用 --inspect 选项,允许 Node.js 进程侦听调试器客户端,该调试器将自己附加到进程并控制程序执行
  • 也可以使用 --inspect-brk 选项,该选项的工作方式与 --inspect 相同,但会在代码开始之前中断代码执行

在启用了检查模式的情况下启动 Node.js 后,可以使用任何兼容的调试器客户端连接到 Node.js 进程

避免将 Node.js 调试器端口绑定到 公共 IP 地址0.0.0.0,否则可以能连接到 IP 地址的任何客户端都可能连接并控制 Node.js 进程

内置调试器

  • 使用 node inspect 此命令行调试器与 Node.js 捆绑在一起

  • node-inspect 调试器将在启用检查模式的情况下运行 Node.js,同时启动集成的交互式调试器

  • 你现在可以使用多个命令来控制程序的执行(以下从概念上来说适用于所有调试)

    • cont 或 c: 继续,继续执行到下一个断点或程序末尾
    • next 或 n: 执行下一行,执行当前上下文中的下一行代码
    • step 或 s: 单步执行,与 next 不同之处在于如果下一行代码是函数调用,则转到此函数代码的第一行
    • out 或 o: 单步跳出,如果当前执行上下文在函数的代码内,请执行该函数的其余代码,然后跳回到最初调用该函数的代码行
    • restart 或 r: 重启,重启程序并在代码开始之前暂停执行
  • 断点控制

    • setBreakpoint()sb(): 在当前行上添加断点
    • setBreakpoint(<N>)sb(<N>): 在行号 N 上添加一个断点
    • clearBreakpoint('myscript.js', <N>)cb('myscript.js', <N>): 清除行号 N 处文件 myscript.js 中的断点
  • 获取有关当前执行点的信息

    • list(<N>): 列出包含当前执行点之前和之后 N 行的源代码
    • exec <EXPR>: 在当前执行上下文中计算表达式
  • 还可以使用 help 命令显示可用命令的完整列表

  • 请按 Ctrl+D 或选择命令 .exit

运用 Visual Studio Code 进行调试:官网文档

调试 Node.js的更多相关文章

  1. 用node-inspector调试Node.js(转自NOANYLOVE'S BLOG)

    原文地址:http://www.noanylove.com/2011/12/node-the-inspector-debugging-node-js/ 用node-inspector调试Node.js ...

  2. vscode 调试node.js

    在开发的过程中,几乎不可能一次性就能写出毫无破绽的程序,断点调试代码是一个普遍的需求. 作为前端开发工程师,以往我们开发的JavaScript程序都运行在浏览器端,利用Chrome提供的开发者工具就可 ...

  3. 使用Chrome DevTools直接调试Node.js与JavaScript(并行)

    Good News: 现在我们可以用浏览器调试node.js了!!! 前提 Node.js 6.3+, 这个可上Node.js官网自行下载: Chrome 55+. 如果您本地的chrome升级到最新 ...

  4. 调试 node.js 程序

    调试 node.js 程序 在程序开发中,如何快速的查找定位问题是一项非常重要的基本功.在实际开发过程中,或多或少都会遇到程序出现问题导致无法正常运行的情况,因此,调试代码就变成了一项无法避免的工作. ...

  5. 【译】在 Chrome 开发者工具中调试 node.js

    原文链接 : Debugging Node.js in Chrome DevTools 原文作者 : MATT DESLAURIERS 译文出自 : 掘金翻译计划 译文链接 : https://git ...

  6. 使用 node-inspector 调试 Node.js

    大部分基于 Node.js 的应用都是执行在浏览器中的, 比如强大的调试工具 node-inspector. node-inspector 是一个全然基于 Node.js 的开源在线调试工具,提供了强 ...

  7. 用 Visual Studio Code 调试 Node.js

    环境: Visual Studio Code  Node.js 1. 关闭运行中的程序 2.打开入口文件,我这里的入口文件为 app.js 3.点击左侧菜单栏的 debug 按钮 4.点击运行按钮 5 ...

  8. node.js系列:(调试工具)node-inspector调试Node.js应用

    如果你在编写Node.js代码,node-inspector是必备之选,比Node.js的内置调试器好出许多.使用起来跟Chrome的javascript调试器很相似. 使用npm安装: $ npm ...

  9. WebStorm远程调试Node.js

    1.服务启动IP及端口,如果是云服务,IP选用服务器内网IP.同时需要防火墙需要添加端口. #添加端口 $ firewall-cmd --zone=public --add-port=9229/tcp ...

  10. Node.js实战(四)之调试Node.js

    当项目逐渐扩大以后,功能越来越多,这时有的时候需要增加或者修改,同时优化某些功能,就有可能出问题了.针对于线上Linux环境我们应该如何调试项目呢? 别怕,Node.js已经为我们考虑到了. 通过 n ...

随机推荐

  1. CSS---鼠标悬浮时逐渐变大样式

    .tuijian_2:hover{ transform: scale(1.3); transition: all 1s; }

  2. mysql binlog查看指定数据库

    1.mysql binlog查看指定数据库的方法 MySQL 的 binlog(二进制日志)主要记录了数据库上执行的所有更改数据的 SQL 语句,包括数据的插入.更新和删除等操作.但直接查看 binl ...

  3. 剑指Offer-58.对称的二叉树(C++/Java)

    题目: 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 分析: 从根结点开始递归对比左右子树即可.需要注意的是,当前左右两个结点相同比较 ...

  4. 关于java的一些吧啦吧啦

    今天凌晨在催眠时刻听了一些了java相关,顺便睡觉了 学习了关于电脑中的一些知识,类似cmd之类的快捷指令,比如切换盘符,显示文件夹等等: 还有jdk的版本下载,第一个程序helloworld怎么编写 ...

  5. linux系统下,安装docker教程,以CentOS8为例

    查看本机的系统信息: 使用命令 lsb_release -a ,可以看到本机是CentOS系统,版本是8.4.2105 一.安装docker 1.Docker的安装要求CentOS系统内核版本要高于3 ...

  6. Do not access Object.prototype method 'hasOwnProperty' from target object

    hasOwnProperty 判断对象是否为空 在使用 hasOwnProperty 判断对象是否为空时遇到了一下问题,总结一下 // Do not access Object.prototype m ...

  7. Linux中的inode

    inode是什么 一个文件由两部分组成:元信息和数据. 在Linux中,inode包含文件的元信息,具体来说有以下内容: Size 文件的字节数 Uid 文件拥有者的User ID Gid 文件的Gr ...

  8. 04-Python文件操作

    打开文件 f=open("我的文件.txt","r",encoding="utf8") #打开一个文件(读模式) f.close() #关闭 ...

  9. Java面试知识点(一)多态

    多态概述 1. 定义 多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的 ...

  10. hive第二课:Hive3.1.2概述与基本操作(修改版)

    Hive3.1.2概述与基本操作 1.Hive基本概念 1.1 Hive简介 Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据存储,说白了hive可以理解为一个将 ...