Node.js 中的代码调试

简介: Node.js 中的代码调试

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 脚本连接上你的目标。

1. $ node debug index_end.js
2. < Debugger attached.
3. < Break on start in index_end.js:1
4. > 1 var express = require('express');
5.   2 const app = express();
6.   3 const bodyParser = require('body-parser');
7. debug> c
8. break in index_end.js:16
9.  14   extended: true
10.  15 })); 
11. >16  debugger;
12.  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调试器协议。

相关文章
|
25天前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
2月前
|
存储 JavaScript 前端开发
非常实用的JavaScript一行代码(整理总结)
非常实用的JavaScript一行代码(整理总结)
30 0
|
2月前
|
JavaScript 前端开发 测试技术
如何编写JavaScript模块化代码
如何编写JavaScript模块化代码
13 0
|
2天前
|
JavaScript 前端开发 开发工具
【JavaScript 与 TypeScript 技术专栏】TypeScript 如何提升 JavaScript 代码的可读性与可维护性
【4月更文挑战第30天】TypeScript 提升 JavaScript 代码的可读性和可维护性,主要通过静态类型系统、增强代码组织、智能提示与错误检测、文档化和在大型项目中的优势。静态类型减少误解,类和接口提供结构,智能提示提高编码效率,类型注解充当内置文档。在大型项目中,TypeScript 降低理解差异,平滑迁移现有 JavaScript 项目,助力提高开发效率和项目质量。
|
9天前
|
JavaScript 前端开发 算法
< JavaScript小技巧:如何优雅的用【一行代码 】实现Js中的常用功能 >
在开发中,采用简洁的语法和结构,遵循一致的命名规范,具有良好的代码组织和注释,能很好的提高代码的质量。可读性:易于阅读和理解。清晰的命名、简洁的语法和良好的代码结构可以使代码的意图更加明确,降低理解代码的难度,提高代码的可读性。可维护性:易于维护。当代码逻辑清晰、结构简洁时,开发者可以更快速地定位和修复bug,进行功能扩展或修改。同时,可读性高的代码也有助于后续的代码重构和优化。可扩展性:更具有扩展性和灵活性。清晰的代码结构和简洁的代码风格使得添加新功能、修改现有功能或扩展代码更加容易。
< JavaScript小技巧:如何优雅的用【一行代码 】实现Js中的常用功能 >
|
10天前
|
前端开发 JavaScript 容器
JavaScript、CSS像素动画特效代码
此示例创建一个带有像素粒子的容器,每隔300毫秒就会动态添加一个新的像素粒子,然后通过CSS的关键帧动画(`@keyframes`)使它们产生上升和逐渐消失的动画效果。你可以根据需要修改像素粒子的颜色、大小、动画效果和创建速度。
12 0
|
16天前
|
JavaScript
js校验统一社会信用代码
js校验统一社会信用代码
19 0
|
19天前
|
监控 前端开发 JavaScript
如何在浏览器中使用javaScript进行代码调试
【4月更文挑战第11天】在浏览器中调试JavaScript是前端开发的关键技能。使用开发者工具(可通过F12、右键检查或菜单栏访问),遵循以下步骤:1) 打开Sources标签页查看所有脚本;2) 设置断点在需要暂停的代码行;3) 刷新页面触发断点;4) 利用调试工具如Scopes、Watch、Call Stack等检查代码状态;5) 使用Console辅助调试;6) 利用其他工具如Network、Performance和Memory进行性能分析。确保使用最新工具,保持代码清晰,以提升调试效率。
41 4
|
25天前
|
小程序 开发者
微信小程序“Error: xxx.js 已被代码依赖分析忽略,无法被其他模块引用”报错?
微信小程序“Error: xxx.js 已被代码依赖分析忽略,无法被其他模块引用”报错?
|
1月前
|
前端开发 JavaScript UED
【前端】javascript+html+css 家具销售网站(代码+报告)
【前端】javascript+html+css 家具销售网站(代码+报告)