首页 > 编程语言 >调试 Node.js

调试 Node.js

时间:2023-02-13 16:58:31浏览次数:55  
标签:Node 代码 js 执行 断点 调试 调试器

调试 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,执行,断点,调试,调试器
From: https://www.cnblogs.com/shadow-/p/17116908.html

相关文章

  • coding持续集成构建环境自定义node版本
    解决方案只需要在构建计划的编写过程中增加一个如下的stage,具体nodejs版本下载地址可参考https://nodejs.org/en/download/releases/这里。stage('toggleNode.......
  • js根据文件链接下载文件
    通过iframe下载//移除旧的节点constoldNode=document.querySelector("#g-download-iframe")if(oldNode){document.body.removeChild(document.querySe......
  • ethers.js 添加区块链网络节点
    <div@click="add">add</div> import{BigNumber}from"ethers"; constobj={chainId:'97',blockBrowseUrl:'https://testnet.bscscan.com',......
  • node版本问题运行vue项目报错
    今天在新电脑安装的node,准备跑vue项目时,居然报错了。因为是在新的设备上安装,所以默认选择官网中的最新稳定版(https://nodejs.org/en/) 然后启动vue 报错!!!  大概......
  • jstack排查cpu占用高的步骤
    通过jstack排查cpu占用高的问题1.通过top命令找到cpu占用高的应用程序进程2.通过top-H-ppid查看该应用中占用CPU高的线程。3.通过printf"%x\n"pid将线程高的线程......
  • JSP内置对象
    4.JSP隐式对象4.1什么是隐式对象:在jsp页面里面,jsp提供了一些对象,不用咱们自己创建,可以直接使用的对象jsp常见的九大隐式对象:request:HttpServletRequest,请求对象,它同时也......
  • How to increase _cluster/settings/cluster.max_shards_per_node for AWS Elasticsea
    logstash错误信息onse=>{"index"=>{"_index"=>"ap2023-02-13","_type"=>"_doc","_id"=>"9whuSYYB4_K8123jxrfb","status"=>400,"error"=>{"type&qu......
  • 六、js页码器
    表格数据太多,需要做成分页。因此需要写一个页码器。1,初始化页码获取数据之后渲染页码器,页码器初始化,小于6页的全部展示,否则展示前四页,后面是省略号,最后展示尾页。默认选......
  • 事件对象与target属性 js 230213
    事件对象target属性它代表了事件针对的目标它有时与this是一样的有时与this是不一样的......
  • JSTL_基本知识
    在jsp中,我们难免要进行一些逻辑运算,为了避免写出难以维护的Java代码,我们使用jstl标签库,它能够结合el表达式,使得jsp文档令人编写阅读轻松。 一、准备工作1、导入jar包......