使用比console.log更优质的前端调试方案

news2025/1/15 23:09:32

程序调试是程序开发必不可少的一环,刚开始接触前端调试时,最常用的就是 console.log 打印变量进行调试,本文会分享一些笔者学习到的前端调试方法,减少对 console.log 调试方式的依赖,选择更优质的前端调试方案。

本文中提到的 command 键,在 Windows 系统中用 control 键替代即可

1. 为什么不用 console.log 一把梭

我们看一下使用 console.log 的步骤:

找到需要调试代码的具体位置
写上一行 console.log() 代码,传入需要打印的变量
保存,等待项目热更新完成
打开控制台,查看打印的变量值
调试结束,删掉打印的那一行代码

平时使用中你可能没发现,原来限定条件这么多,调试变量需要这五个步骤一个都不能省。
遇到复杂的函数执行逻辑时,甚至要在每个函数中打印来确定函数的执行,这种情况下实在是不怎么方便。

简单的调试还是可取的,看个人调试习惯,较为复杂的调试就不推荐使用 console.log 了

2. 使用浏览器调试

在本地代码端,可以 通过添加一行 debugger; 命令,当代码执行到这一行,会自动进入调试模式
从浏览器端进行浏览器调试需要以下几个步骤:

打开 浏览器开发者工具的 Sources 源代码面板
找到需要调试的文件
打断点
进入 Debugger 模式,开始调试

2.1 找到需要调试的文件

在浏览器当中直接找调试文件有两种方式:搜索文件调试 和 通过文件目录查找调试文件

2.1.1 搜索文件调试

如果没有打开的调试页,空页面中会当前浏览器查找文件的快捷键提示
以谷歌浏览器为例,可以通过 command + P 查找文件 的方式打开需要调试的文件
在这里插入图片描述

按下 command + p 快捷键后,搜索你要调试的文件,例如 Component/index.tsx , 即可打开对应的调试文件,接下来,就可以开始打断点了。在这一步下,最便捷的打断点方式就是点击需要调试代码的 行号,当代码指定到这行时,会自动进入浏览器的断点调试模式

2.1.2 通过文件目录查找调试文件

点击左上角的展开图标, 推荐勾选上这三个筛选分类选项,在左侧 “网页” Tab 下,会实时展示加载模块的文件,找到需要调试的文件,接下来就可以开始调试了
在这里插入图片描述

2.2 打 JavaScript 断点

找到文件之后就可以开始打断点了,在浏览器中最便捷也是最常用的就是直接点击行号打断点,例如这里在点击事件这一行打了断点,当触发这个点击事件时,这个断点就会被触发了。
在这里插入图片描述

此外,右键行号也可以进行添加断点,它提供了更多的选项,例如:

条件断点,指定条件为 true 时才触发断点
日志点,记录消息
其他执行操作,执行到此处、不在此处暂停等

2.3 Debugger 调试

进入 Debugger 调试模式之后,源代码面板右侧的调试控制台上方有七个按钮,分别表示

0.执行/暂停
1.跨步执行(运行下一行代码)
2.JS执行下一步(忽略异步行为)
3.JS执行上一步(忽略异步行为)
4.执行到函数末尾
5.禁用所有断点
6.启动/关闭错误时暂停执行

在这里插入图片描述

在Debugger 模式下可以查看 JavaScript 完整的执行过程,将鼠标移到执行过的变量上可以直接看到变量的值
在调试控制台下方的信息区域,可以查看断点的集合、当前函数的变量、全局变量、闭包和调用堆栈等信息

2.4 打 DOM 断点

给 DOM 元素添加断点,当DOM 元素发生变化时,会进入 debugger 模式,具体方法如下:
在控制台的 元素 标签页选中 DOM 节点,右键 选择发生中断的条件 可设置为属性修改 ,元素属性变化的时候,就会进入断点模式

3. 使用 VsCode 调试

谷歌浏览器的 debugger 插件已经内置了,这里以火狐浏览器举例,步骤如下:

1.安装 Debugger for Firefox

2.左侧图标点击 ”调试” ,若无配置可添加配置,按照默认的添加 lauch 方式即可, 或者直接在根目录下创建一个 .vscode 目录,里面新建一个 launch.json 文件,添加上配置, 官网调试文档 有必要一读, 以火

{
  // 使用 IntelliSense 了解相关属性。 
  // 悬停以查看现有属性的描述。
  // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "firefox", // 浏览器类型
      "request": "launch", // 调试连接方式,launch 为新打开一个浏览器实例调试, attach 为附加到已打开的浏览器上
      "name": "firefox", // 调试配置的名称
      "url": "http://localhost:3009/", // 调试项目的主页地址
      "webRoot": "${workspaceFolder}/src", // 文件执行路径
      "pathMappings": [{ "url": "webpack:///src/", "path": "${webRoot}/" }],
      "profile": "default-release" // 可选配置, 火狐浏览器用户档案
    }
  ]
}

profile 配置 是可选的配置项,表示打开浏览器实例之后使用的用户档案,正常打开实例之后,会打开一个类似于进入了无痕窗口模式的浏览器,如果想正常进入浏览器,查看书签使用浏览器扩展,就需要这个配置项了
在火狐的地址栏中输入about:profiles 可以看到所有的档案方案,这里我直接使用了默认的档案方案

配置完成后,打上断点,然后启动项目,点击调试按钮即可启动 VsCode 调试,执行到断点的地方会自动进入 VsCode 的调试模式,和浏览器中调试方式差不多
在这里插入图片描述

4. 一些小技巧

console 打印

打印 对象数组集合 使用 console.table 可以更图表化的查看数据
打印 DOM 对象 使用 console.dir 可以打印出 DOM 节点的具体属性

快捷键
command + option + i 快速打开 开发者工具 源代码 面板
command + shift + c,打开 开发者工具 Element 面板,并启用 元素审查
查看 hover 状态下的元素
打开控制台的 source (中文源代码) 面板,按下command + 会进入 debugger 模式
选中元素,在 Element 面板右键 选择强制执行状态 :hover

5. 结语

关于学习前端调试,我认为一文读懂是不可能的,本文的一点内容算是抛砖引玉,供大家参考,如果想更深层次的学习前后端,可下载CRMEB开源项目学习,附件点​此下载​

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

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

相关文章

Android开发进阶——RxJava核心架构分析

简介 RxJava是对响应式扩展( Reactive Extensions,称之为 ReactiveX )规范的Java 实现,该规范还有其他语言实现:RxJS、Rx.Net、RxScala、RxSwift等等(也即,ReactiveX 定义了规范,其他…

pip安装时报错 ascii‘ codec can‘t decode byte 0xe2 in position...

在使用pip安装包的时候报错ascii’ codec can’t decode byte 0xe2 in position… 报错信息 UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe2 in position 1429: ordinal not in range(128) 以前好像见过类似的情况,所以搜了一下怎么修改python默认…

聊聊ChatGPT

最近ChatGPT火出圈。 在过去三个月里,眼见着它的热度火箭一般蹿升,据瑞银上周三发布的报告显示,GPT已经超过了Tiktok,成为人类有史以来最快突破1亿月活跃用户的互联网产品。Tiktok当初用了9个月,而GPT只用了2个月。 …

Spring使用了哪些设计模式?

目录Spring中涉及的设计模式总结1.简单工厂(非23种设计模式中的一种)2.工厂方法3.单例模式4.适配器模式5.装饰器模式6.代理模式7.观察者模式8.策略模式9.模版方法模式Spring中涉及的设计模式总结 1.简单工厂(非23种设计模式中的一种) 实现方式: BeanFactory。Spri…

go-grpc的使用和学习

文章目录基础知识:操作流程安装proto文件配置grpc: 正常客户端发送数据(以字节流的方式),服务器接受并解析,根据约定知道要执行什么,然后把结果返回给客户 rpc将上述过程封装,使其操作更加优化,…

Vue 3 中的极致防抖/节流(含常见方式防抖/节流)

各位朋友你们好呀。今天是立春,明天就是正月十五元宵节了,这种立春 元宵相隔的时候,可是很难遇到的,百年中就只有几次。在这提前祝大家元宵快乐。 今天给大家带来的是Vue 3 中的极致防抖/节流(含常见方式防抖/节流&a…

ChatGPT给程序员人手一个,这很朋克

目录ChatGPT、程序员、朋克为什么程序员需要ChatGPT,为什么这很朋克总结ChatGPT、程序员、朋克 本文由ChatGPT编写。 ChatGPT是由OpenAI开发的大型语言模型。它的核心功能是生成人类语言文本,因此有多种应用场景,如文本生成、对话生成、文本…

「VUE架构」Vue2与Vue3的区别

文章目录前言一、性能比Vue2快1.2~2倍1.1 diff算法优化1.2 事件侦听缓存1.3 减少创建组件实例的开销二、 按需编译,体积比Vue2更小三、 Compostion API四、 支持TS五、 自定义渲染API六、更先进的组件七、 更快的开发体验前言 VUE是一套用于构建用户界面的渐进式框…

Nginx常用功能举例解析

Nginx提供的基本功能服务从大体上归纳为"基本HTTP服务"、“高级HTTP服务”和"邮件服务"等三大类。基本HTTP服务Nginx可以提供基本HTTP服务,可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的…

【FPGA】Verilog:组合逻辑电路应用 | 数码管 | 8421BCD编码 | 转换七段数码管段码

前言:本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:数码管的使用 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片 配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度 存储器:2M…

Vue-VueRouter

前言 Vue Router 是 Vue.js (opens new window)官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有: 嵌套的路由/视图表模块化的、基于组件的路由配置路由参数、查询、通配符基于 Vue.js 过渡系统的视图过渡效果…

SPSS聚类分析(含k-均值聚类,系统聚类和二阶聚类)

本篇博客主要是根据1、聚类的基本知识点_哔哩哔哩_bilibili系列视频进行的学习记录一、SPSS聚类分析的基本知识点1、什么是聚类分析?聚类分析(Cluster analysis)又叫做群集分析,通过一些属性将对象或变量分成不同的组别,在同一类下的对象或变量在这些属性上具有一些…

最全面的SpringBoot教程(四)——数据库连接

前言 本文为 最全面的SpringBoot教程(四)——数据库连接 相关知识,下边将对JDBC连接配置,与使用Druid数据源,从添加依赖到修改配置项再到测试进行详尽介绍~ 📌博主主页:小新要变强 的主页 &…

C语言深度解剖-关键字(5)

目录 if else 组合 if else 的基本用法 注释 深入理解bool float(double)与浮点数的比较 写在最后&#xff1a; if else 组合 if else 的基本用法 #include <stdio.h>int main() {int flag 1;if (flag 1){printf("flag %d\n", flag);}else if (flag…

crmeb pro多门店版二次开发

重启一下swool 新创建的数据库表 ALTER TABLE eb_store_cart ADD price DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT 单独改价 AFTER status;ALTER TABLE eb_store_order ADD car_no VARCHAR(255) NOT NULL DEFAULT COMMENT 车牌号 AFTER erp_order_id, ADD frame_no VARCHA…

2023软考系统集成项目管理工程师易混淆知识点~(7)

将2023上半年软考《系统集成项目管理工程师》易混淆知识点&#xff0c;分享给大家&#xff0c;快来跟着一起打卡学习吧&#xff01;概念辨析 1:项目、运营概念:(1)项目:项目是为达到特定目的&#xff0c;使用一定资源&#xff0c;在确定的期间内&#xff0c;为特定发起人而提供…

Linux perf的使用(一)

文章目录前言一、perf简介二、perf子命令简介三、perf工作模式3.1 计数3.2 采样参考资料前言 系统级性能优化通常包括两个阶段&#xff1a;性能剖析&#xff08;performance profiling&#xff09;和代码优化。 &#xff08;1&#xff09;性能剖析的目标是寻找性能瓶颈&#x…

python(13)--字典(Dict)

一、字典的基本操作 1.定义字典 字典也是一个列表型的数据结构&#xff0c;字典的数据是用“{ }”装的&#xff08;列表&#xff1a;[ ]&#xff0c;元组&#xff1a;( )&#xff09;&#xff0c;字典的元素是一一对应的关系“key-value”。 格式&#xff1a; Dictname{ key1…

vue中父子组件的传值

1. 父组件给子组件传值 主要两个步骤&#xff1a; 1. 在父组件调用子组件的时候绑定数据 2. 在子组件里面通过props接收父组件传过来的数据 2. 子组件给父组件传值 主要三个步骤&#xff1a; 1.在子组件中创建一个按钮&#xff0c;给按钮绑定一个点击事件 2.在响应该点击事件…

NSSRound#7

[NSSRound#7 Team]ec_RCE 源码: <?PHPif(!isset($_POST["action"]) && !isset($_POST["data"]))show_source(__FILE__);putenv(LANGzh_TW.utf8); $action $_POST["action"];$data "".$_POST["data"]."…