Node.js 中的代码调试

news2024/11/19 18:38:17

目录

1、启用 Inspector

2、安全隐患

3、Inspector 客户端

4、启用远程调试的情形

5、以前的Debugger


1、启用 Inspector

当使用 --inspect 开关时,Node.js 进程开始侦听调试客户端,默认情况下侦听 127.0.0.1:9229 的域名和端口号;每个进程都有一个唯一的 UUID 标示符。

检查器的客户端必须知晓并制定连接的域名地址、端口号以及 UUID。一个完整的 URL 看上去如:
ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e

如果收到了 SIGUSR1 信号 (SIGUSR1 在 Windows 下不可用),Node.js 同样会开始侦听调试信息;在 Node.js 7 以及先前的版本中,这将激活旧版本的调试 API(legacy Debugger API);在 Node.js 8 和后续版本中,将激活检查器 API(Inspector API)。

2、安全隐患

由于调试器对 Node.js 执行环境具有完全访问权限,能够连接到此端口的恶意行为者能够代替 Node.js 进程执行任意代码。理解将调试器端口暴露在公共和专用网络上所受影响的安全性是很重要的。

1、把调试端口暴露在公共网络是不安全的。

2、本地应用有足够的权限访问监视器,在调试的时候,我们可以更方便的去访问本地资源。

3、浏览器,网络套接字和同源政策

网站的开放是通过一个可以让网络套接字和 HTTP 请求在浏览器安全模式下进行的。一个初始化的 HTTP 连接必须先获得一个唯一的调试会话 ID。同源政策能够阻止这个网站与 HTTP 连接。对于其它额外的安全防范DNS 重新绑定攻击,Node.js 会先精确验证‘宿主’头连接不是一个一个指定的 IP 地址,或 localhost。

这些安全政策不允许通过指定主机名的方式直接进行远程连接。你不是通过指定 IP 地址,就是使用 ssh 管道的方式(下面将会有所陈述)绕开此限制。

3、Inspector 客户端

一些商业和开源工具可以连接到 Node 的监视器上,关于它们基本信息如下:

Chrome DevTools55+,Microsoft Edge

  • 方法1:在基于Chromium 内核的浏览器中打开chrome://inspect,或在Edge浏览器下打开 edge://inspect,点击配置按钮确,输入你目标主机的ip和端口号
  • 方法2:从/json/list下,复制devtoolsFrontendUrl对应的内容或--inspect 提示文本并粘贴到 Chrome中。

 chrome://inspect

devtoolsFrontendUrl

请注意:Node.js 和 Chrome 必须在同一个平台上运行。

在Visual Studio Code 中。

  • 在 Debug 面板中,点击“设置图标”,打开 .vscode/launch.json,选择 "Node.js" 进行初始化构建。

 

4、启用远程调试的情形

推荐你千万不要使用调试器监听公共的 IP 地址。如果你真需要允许远程调试连接,那么就请使用 SSH 代替。
我们可以登录的机器上运行命令:

node --inspect server.js

打开Chrome 浏览器,出现一下窗口。

 

chrome 控制台

 

单击图标,跳转到Node调试窗口

在你本地机器上,从你初始化一个调试客户端连接开始,你创建了一个 SSH 管道:

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

ssh 管道启动,在你机器上连接到 9221 端口将被重定向到 9229 的 remote.example.com 地址上。你可以附加一个调试器,例如 Chrome 开发工具或者是指向 localhost:9221 的 Visual Studio Code。如果 Node.js 本地正在运行,应该可以调试了。

5、以前的Debugger

遗留的Debugger自 Node 7.7.0 已被弃用。请使用 --inspect 代替。

在版本 7 以及更早的版本使用 --debug 或 --debug-brk 开关启动调试时,Node.js 侦听由中断定义的调试命令,TCP 端口上的 V8 调试协议,默认为 5858。任何遵守此协议的调试客户端都可以连接并调试运行这个进程,下面有一些热门的说明。

内置的Debugger(例如:
https://nodejs.org/dist/v0.8.0/docs/api/debugger.html)
在 Node.js 内置命令行调试器中用 node debug script_name.js 启动你的脚本。你的脚本就在 Node 另外一个进程中随着 --debug-brk 启动了起来,并且初始化的 Node 进程运行 _debugger.js 脚本连接上你的目标。

$ node debug index_end.js
< Debugger attached.
< Break on start in index_end.js:1
> 1 var express = require('express');
  2 const app = express();
  3 const bodyParser = require('body-parser');
debug> c
break in index_end.js:16
 14   extended: true
 15 })); 
>16  debugger;
 17 app.use(express.static('public'))
  • cont、c - 继续执行
  • next、n - 下一步
  • step、s - 步入
  • out,o - 走出来
  • pause - 暂停运行代码(类似于Developer Tools中的暂停按钮)
  • .exit - 退出debug
  • scripts -列出所有加载的脚本
  • version -显示v8版本

node-inspector

使用中间进程ChromeDevTools调试Node. js应用,该进程将Chromium中使用的检查器协议转换为Node.js中使用的V8调试器协议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/591597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题B卷 Java 实现【Linux 发行版的数量】,附详细解题思路

一、题目描述 Linux 操作系统有多个发行版&#xff0c;distrowatch.com 提供了各个发行版的资料。这些发行版互相存在关联&#xff0c;例如 Ubuntu 基于 Debian 只开发而 Mint 又基于 Ubuntu 开发&#xff0c;那么我们认为 Mint 同 Debian 也存在关联。 发行版集是一个或多个…

用Python求最大公约数和最小公倍数(51)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 什么是最大公约数&#xff1f; 如何用Python求最大公约数&#xff1f; 什么是最小公倍数&#xff1f; 如何用Pyt…

chatgpt赋能python:Python中的连接符:介绍与应用

Python中的连接符&#xff1a;介绍与应用 在Python编程中&#xff0c;连接符起着关键性的作用&#xff0c;它是连接不同代码部分的纽带。本篇文章将重点介绍几种常用的Python连接符。 一、加号连接符&#xff08;&#xff09; 加号连接符最常见&#xff0c;用于连接不同的字…

一文读懂TSC时钟: (x86_64/arm64)实现介绍和编程使用

Linux(16)之Time Stamp Counter Author&#xff1a;Once Day Date&#xff1a;2023年5月30日 参考文档: 4. Environment Abstraction Layer — Data Plane Development Kit 23.03.0 documentation (dpdk.org)DPDK: lib/eal/include/generic/rte_cycles.h File Reference测量…

交换机安全功能介绍

今天海翎光电的小编来给大家聊聊以太网交换机安全功能。 交换机作为局域网中最常见的设备&#xff0c;在安全上面临着重大威胁&#xff0c;这些威胁有的是针对交换机管理上的漏洞&#xff0c;攻击者试图控制交换机。有的针对的是交换机的功能&#xff0c;攻击者试图扰乱交换机的…

新手快速学会使用DDL对数据库和表的操作

前言 SQL是一种操作关系型数据库的结构化查询语言。今天这篇文章将详细讲述数据定义语言DDL对数据库和表的相关操作。 文章目录 前言1. DDL-操作数据库1.1 查询1.2 创建数据库1.3 删除数据库1.4 使用数据库2.1 数据类型2.2 查询表2.3 创建表2.4 删除表2.5 修改表 3. 实战案例详…

统计学的假设检验/置信区间计算

假设检验的核心其实就是反证法。反证法是数学中的一个概念&#xff0c;就是你要证明一个结论是正确的&#xff0c;那么先假设这个结论是错误的&#xff0c;然后以这个结论是错误的为前提条件进行推理&#xff0c;推理出来的结果与假设条件矛盾&#xff0c;这个时候就说明这个假…

Navicat 15获取用户的密码

我使用Navicat连接好了mysql但是密码忘记了&#xff1b;可以通过如下操作找回密码 我使用的Navicat版本是 15.0.27 1、选择文件 --> 导出连接 2、选择你要知道密码的连接  勾选导出密码&#xff08;默认位置是桌面&#xff09; 3、 在Password 这栏找到加密后的密码 …

基于Android应用开发实现UWB(超宽带)通信

什么是超宽带UWB 超宽带通信是一种无线电技术,专注于设备之间的精确测距(测量位置的精度为 10 厘米)。这种无线电技术可以使用低能量密度进行短距离测量,并在大部分无线电频谱上执行高带宽信号传输。UWB 的带宽大于 500 MHz(或超过 20% 的小数带宽)。 从 Android 13 开…

[GXYCTF2019]Ping Ping Ping解题过程

1、来看看靶场 发现就只有这个提示&#xff0c;尝试一下在url输入框进行测试 页面返回ping的结果&#xff0c;然后我之前也做过另外一道类似的题 链接&#xff1a;[ACTF2020 新生赛]Exec1命令注入_[actf2020 新生赛]exec 1_旺仔Sec的博客-CSDN博客 尝试用管道符 果然是可以的…

chatgpt赋能python:Python中语句太长之续行符的使用

Python中语句太长之续行符的使用 如果你是一位有10年Python编程经验的工程师&#xff0c;那么你一定会遭遇语句太长的问题。这是导致程序出错的常见问题。在很多情况下&#xff0c;一条语句的长度会超过Python规定的最大长度&#xff0c;这时候我们就需要使用续行符进行换行了…

C语言——数据在内存中的存储(上)

数据在内存中的存储 1. 数据类型的介绍 之前已经介绍过C语言中的基本数据类型了&#xff0c;主要有&#xff1a; char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数 注意&#xff1a;C语言中是是没…

JVM学习笔记(中)

1、垃圾回收算法 标记清除法 特点&#xff1a; 速度较快会产生内存碎片 注意&#xff1a;这里的清除并不是真正意义上的清除&#xff0c;即每个字节都清0&#xff0c;而是记录一下被清除的对象的起始和结束的地址&#xff0c;当下一次分配给一个新对象时&#xff0c;新对象…

一文看懂数字化转型丨三叠云

相信很多朋友在最近这几年对“数字化”、“数字化转型”等名词听得很多了吧&#xff0c;去网上搜搜“数字化转型”&#xff0c;这几年各式各样的信息如火如荼&#xff0c;充斥着互联网平台和大大小小的企业。 一、什么是数字化转型&#xff1f; 那么“数字化”和“数字化转型”…

【ros/ros2】LCN及ros2节点的LCN改写

文章目录 序言1. ros2两种节点类型2. LCN是什么3. LCN状态转换4. LCN状态转换要做的事5. LCN节点功能划分6. ros2节点的LCN改写 序言 背景&#xff1a;ros2节点改写为lifecycle node节点 1. ros2两种节点类型 Node&#xff1a;和ros1中一样的节点基类LifecycleNode&#xff…

法规标准-ISO 11270标准解读(2014版)

ISO 11270是做什么的&#xff1f; ISO 11270全名为智能交通系统-车道保持辅助系统(LKAS)-性能要求及测试步骤&#xff0c;其中主要是对LKAS系统的功能要求、性能要求及测试步骤进行了介绍。 功能要求 LKAS应至少提供以下操作和状态转换&#xff1a; ——从LKAS off到LKAS on的…

chatgpt赋能python:Python中的精度问题

Python中的精度问题 如果你曾经在Python中处理浮点数&#xff0c;你可能会遇到精度问题。当使用不同的运算符和内置函数时&#xff0c;浮点数很容易产生舍入误差。这种误差可能会导致意想不到的结果&#xff0c;特别是在科学计算和金融应用中。 为什么会出现精度问题&#xf…

Spring AOP简介及相关案例

目录 一、Spring AOP简介 二、AOP相关术语 三、AOP入门案例 1. 引入依赖 2. 编写连接点 3. 编写通知类 4. 配置切面 5. 测试 四、通知类型 1. 编写通知方法 2. 配置切面 3. 测试 五、切点表达式 六、多切面配置 1. 编写发送邮件的通知 2. 配置切面 3. 测试 …

flex 布局的基本概念 - 详解

flex 布局的基本概念 Flexible Box 模型&#xff0c;通常被称为 flexbox&#xff0c;是一种一维的布局模型。它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力。本文给出了 flexbox 的主要特性&#xff0c;更多的细节将在别的文档中探索。我们说 flexbox 是一种一维的…

Metasploit超详细安装及使用教程(图文版)

通过本篇文章&#xff0c;我们将会学习以下内容&#xff1a; 1、在Windows上安装Metasploit 2、在Linux和MacOS上安装Metasploit 3、在Kali Linux中使用 Metasploit 4、升级Kali Linux 5、使用虚拟化软件构建渗透测试实验环境 6、配置SSH连接 7、使用SSH连接Kali 8、配…