当前位置: 首页 > news >正文

`console.log`调试完全指南

大家好,这里是 Geek技术前线

今天我们来探讨 Console.log() 的一些优点。并分析一些基本概念和实践,这些可以让我们的调试工作变得更加高效。
在这里插入图片描述

理解前端 log 与后端 log 的区别

前端 log 与后端 log 有着显著的不同,理解这一点至关重要。与后端系统中持久化 log 对于监控和调试不同,前端开发的流动性带来了不同的挑战。在调试后端时,我们通常会使用 tracepoints。

然而,前端由于需要不断刷新、重新加载、切换上下文等,情况就大不相同。在前端,过于依赖复杂的 log 机制可能会变得繁琐。

虽然 tracepoints 在基本打印语句之上仍然更为优越,但在前端工作流程中,持续的测试和浏览器重载减少了它们的优势。此外,像将 log 记录到文件或结构化摄取这样的功能在浏览器中很少有用

不过,使用 log 记录器仍然被认为是长期 log 记录的最佳实践,而典型的 Console.log 在短期 log 记录中也有一些小技巧。

利用 Console log 级别

浏览器控制台的一个隐藏功能是它对 log 级别的支持,这比基本的打印语句要强大得多。控制台提供了五个级别:

log:标准 log 记录

debug:与 log 相同,但用于调试目的

info:信息性消息,通常与 log/debug 呈现相似

warn:可能需要注意的警告

error:发生的错误

虽然 log 和 debug 可能难以区分,但这些级别使得调试体验更加有序和过滤。浏览器允许根据这些级别过滤输出,类似于服务器端 log 系统的功能,让我们能够专注于相关消息。
image

使用 CSS 自定义控制台输出

前端开发为我们提供了创造性解决方案的机会,而 log 记录也不例外。在控制台中使用 CSS 样式可以使 log 更加引人注目。通过在控制台消息中使用 %c,我们可以应用自定义的 CSS 样式:

console.customLog = function (msg) {console.log("%c" + msg,"color:black;background:pink;font-family:system-ui;font-size:4rem;-webkit-text-stroke: 1px black;font-weight:bold");
};
console.customLog("Dazzle");

这种方法在我们需要让特定 log 突出或以视觉方式组织输出时非常有用。我们可以使用多个 %c 替换符来为 log 消息的不同部分应用各种样式。

image

使用 console.trace() 进行堆栈追踪

console.trace() 方法可以在特定位置打印堆栈追踪,这在理解代码流时有时会非常有帮助。然而,由于 JavaScript 的异步特性,堆栈追踪并不总是像后端调试那样简单。不过,在某些场景下,例如同步代码段或事件处理,它仍然非常有价值。

断言

前端代码中的断言允许开发者强制执行预期,并促进“快速失败”的心态。使用 Console.assert(),我们可以测试条件:

console.assert(x > 0, "x must be greater than zero");

在浏览器中,失败的断言会显示为错误,类似于 console.error。一个额外的好处是,断言可以从生产构建中剔除,从而消除任何性能影响

image

将对象复制到剪贴板

在调试过程中,我们常常需要检查对象,而 copy(object) 方法则允许我们将对象的内容复制到剪贴板,以便在外部使用。这一功能在我们需要传输数据或在浏览器外部分析数据时非常有用。

使用 console.dir() 和 dirxml() 进行检查

console.dir() 方法提供了更详细的对象视图,展示了它们的属性,就像在调试器中看到的一样。这对于检查 DOM 元素或探索 API 响应特别有帮助。同时,console.dirxml() 允许我们以 XML 形式查看对象,这在调试 HTML 结构时也非常实用。

计数函数调用

跟踪函数被调用的频率或代码块的执行次数是至关重要的。console.count() 方法可以记录它被调用的次数,帮助我们验证函数是否按预期被调用:

function myFunction() {console.count("myFunction called");
}

我们可以使用 console.countReset() 来重置计数器。这个简单的工具可以帮助我们捕捉性能问题或确认正确的执行流程。

使用分组组织 log

为了防止 log 杂乱,我们可以使用控制台分组来组织相关消息。console.group() 开始一个可折叠的 log 部分,而 console.groupEnd() 则关闭它:

console.group("My Group");
console.log("Message 1");
console.log("Message 2");
console.groupEnd();

分组使得我们更容易浏览复杂的 log,并保持控制台的整洁。

Chrome 特定的调试功能

监控功能:Chrome 的 monitor() 方法可以记录对函数的每一次调用,显示参数,从而提供一种方法追踪的体验。

监控事件:使用 monitorEvents(),我们可以记录某个元素上的事件。这对于调试用户界面交互非常有用。例如,monitorEvents(window, 'mouseout') 只会记录 mouseout 事件。

查询对象实例queryObjects(Constructor) 列出所有使用特定构造函数创建的对象,让我们对内存使用和对象实例化有更深入的了解。

总结

前端调试工具已经取得了长足的进步。这些工具提供了一系列丰富的功能,远远超出了简单的 console.log() 语句。从 log 级别和 CSS 样式到断言和事件监控,掌握这些技巧可以彻底改变我们的调试工作流程。

参考 https://hackernoon.com/front-end-debugging-part-2-consolelog-to-the-max-explained?source=rss

相关文章:

`console.log`调试完全指南

大家好,这里是 Geek技术前线。 今天我们来探讨 Console.log() 的一些优点。并分析一些基本概念和实践,这些可以让我们的调试工作变得更加高效。 理解前端 log 与后端 log 的区别 前端 log 与后端 log 有着显著的不同,理解这一点至关重要。…...

ROS VSCode调试方法

VSCode 调试 Ros文档 1.编译参数设置 cd catkin_ws catkin_make -DCMAKE_BUILD_TYPEDebug2.vscode 调试插件安装 可在扩展中安装(Ctrl Shift X): 1.ROS 2.C/C 3.C Intelliense 4.Msg Language Support 5.Txt Syntax 3.导入已有或者新建ROS工作空间 3.1 导入工作…...

16 —— Webpack多页面打包

需求&#xff1a;把 黑马头条登陆页面-内容页面 一起引入打包使用 步骤&#xff1a; 准备源码&#xff08;html、css、js&#xff09;放入相应位置&#xff0c;并改用模块化语法导出 原始content.html代码 <!DOCTYPE html> <html lang"en"><head&…...

微服务即时通讯系统的实现(服务端)----(3)

目录 1. 消息存储子服务的实现1.1 功能设计1.2 模块划分1.3 模块功能示意图1.4 数据管理1.4.1 数据库消息管理1.4.2 ES文本消息管理 1.5 接口的实现1.5.1 消息存储子服务所用到的protobuf接口实现1.5.2 最近N条消息获取接口实现1.5.3 指定时间段消息搜索接口实现1.5.4 关键字消…...

.net6.0 mvc 传递 model 实体参数(无法对 null 引用执行运行时绑定)

说一下情况&#xff1a; 代码没问题&#xff0c;能成功从数据库里查到数据&#xff0c;能将数据丢给ViewBag.XXXX, 在View页面也能获取到 ViewBag.XXXX的值&#xff0c;但是发布到线上后报这个错&#xff1a; Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 无法对 …...

VUE 入门级教程:开启 Vue.js 编程之旅

一、Vue.js 简介 Vue.js 是一套构建用户界面的渐进式 JavaScript 框架。它专注于视图层的开发&#xff0c;能够轻松地与其他库或现有项目进行整合。Vue.js 的核心库只关注视图层&#xff0c;通过简洁的 API 实现数据绑定和 DOM 操作的响应式更新&#xff0c;让开发者可以高效地…...

Ubantu系统docker运行成功拉取失败【成功解决】

解决docker运行成功拉取失败 失败报错 skysky-Legion-Y7000-IRX9:~$ docker run hello-world docker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head “http://%2Fvar%2Frun%2Fdocker.sock/_ping”: dial uni…...

mvn-mac操作小记

1.安装brew 如果报错&#xff0c;Warning: /opt/homebrew/bin is not in your PATH. vim ~/.zshrc&#xff0c;最后一行追加 export PATH“/opt/homebrew/bin:$PATH” source ~/.zshrc 2.安装brew install maven mvn -version查看路径 Maven home: /opt/homebrew/Cellar/mav…...

机器学习——生成对抗网络(GANs):原理、进展与应用前景分析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一. 生成对抗网络的基本原理二. 使用步骤2.1 对抗性训练2.2 损失函数 三. GAN的变种和进展四. 生成对抗网络的应用五. 持续挑战与未来发展方向六. 小结 前言 生…...

「Mac畅玩鸿蒙与硬件33」UI互动应用篇10 - 数字猜谜游戏

本篇将带你实现一个简单的数字猜谜游戏。用户输入一个数字&#xff0c;应用会判断是否接近目标数字&#xff0c;并提供提示“高一点”或“低一点”&#xff0c;直到用户猜中目标数字。这个小游戏结合状态管理和用户交互&#xff0c;是一个入门级的互动应用示例。 关键词 UI互…...

Ps:存储 Adobe PDF

在 Adobe Photoshop 中&#xff0c;将图像保存为 PDF 文件时&#xff0c; 会弹出“存储 Adobe PDF” Save Adobe PDF对话框。在此对话框中提供了多个选项&#xff0c;用于控制 PDF 文件的输出&#xff0c;包括一般设置&#xff08;选择预设、兼容性和保留编辑功能&#xff09;、…...

DDR3保姆级使用教程:ZYNQ 7010

内容:使用DDR3 IP核&#xff0c;向DDR3写入数据&#xff0c;然后再读出数据&#xff0c;通过串口打印。 设备&#xff1a;ZYNQ 7010 xc7z010clg-400-1。软件VIVADO 2018.3 &#xff08;1&#xff09;工程模块&#xff1a;一个写FIFO&#xff0c;一个读FIFO。一个ZYNQ IP核&am…...

OpenCV 模板匹配全解析:从单模板到多模板的实战指南

简介&#xff1a;本文深入探讨 OpenCV 中的模板匹配技术。详细介绍构建输入图像与模板图像的步骤&#xff0c;包括读取、截取、滤波与存储等操作。剖析 cv2.matchTemplate 语法及其参数含义&#xff0c;阐述不同匹配方法下结果值的意义。同时讲解 cv2.minMaxLoc 语法&#xff0…...

【JAVA] 杂谈: java中的拷贝(克隆方法)

这篇文章我们来介绍什么是拷贝&#xff0c;并且实现浅拷贝到深拷贝。 目录 一、浅拷贝 1.1 clone 方法 1.2 实现浅拷贝&#xff1a; 1.2.1 重写 clone方法 1.2.2 实现接口 Cloneable 1.2.3 调用克隆方法 1.2.4 原理图&#xff1a;​ 1.3 浅拷贝的不足 1.3.1 增加引用…...

使用 PDF API 合并 PDF 文件

内容来源&#xff1a; 如何在 Mac 上合并 PDF 文件 1. 注册与认证 您可以注册一个免费的 ComPDFKit API 帐户&#xff0c;该帐户允许您在 30 天内免费无限制地处理 1,000 多个文档。 ComPDFKit API 使用 JSON Web Tokens 方法进行安全身份验证。从控制面板获取您的公钥和密钥&…...

关于BeanUtils.copyProperties是否能正常复制字段【详细版】

话不多说&#xff01;先总结&#xff1a; 1、字段相同&#xff0c;类型不同&#xff08;不复制&#xff0c;也不报错&#xff09; 2、子类父类 (1)子类传给父类&#xff08;可以正常复制&#xff09; (2)父类传给子类&#xff08;可以正常复制&#xff09; 3、子类父类&#x…...

爬虫框架快速入门——Scrapy

适用人群&#xff1a;零基础、对网络爬虫有兴趣但不知道从何开始的小白。 什么是 Scrapy&#xff1f; Scrapy 是一个基于 Python 的网络爬虫框架&#xff0c;它能帮助你快速爬取网站上的数据&#xff0c;并将数据保存到文件或数据库中。 特点&#xff1a; 高效&#xff1a;支…...

鸿蒙开发-HMS Kit能力集(应用内支付、推送服务)

1 应用内支付 开发步骤 步骤一&#xff1a;判断当前登录的华为账号所在服务地是否支持应用内支付 在使用应用内支付之前&#xff0c;您的应用需要向IAP Kit发送queryEnvironmentStatus请求&#xff0c;以此判断用户当前登录的华为帐号所在的服务地是否在IAP Kit支持结算的国…...

TYUT设计模式大题

对比简单工厂&#xff0c;工厂方法&#xff0c;抽象工厂模式 比较安全组合模式和透明组合模式 安全组合模式容器节点有管理子部件的方法&#xff0c;而叶子节点没有&#xff0c;防止在用户在叶子节点上调用不适当的方法&#xff0c;保证了的安全性&#xff0c;防止叶子节点暴露…...

Webman中实现定时任务

文章目录 Webman中实现定时任务一、引言二、安装与配置1、安装Crontab组件2、创建进程文件3、配置进程文件随Webman启动4、重启Webman5、Cron表达式&#xff08;补充&#xff09;例子 三、使用示例四、总结 Webman中实现定时任务 一、引言 在现代的后端开发中&#xff0c;定时…...

springboot同城二手物品交易配送系统的设计与实现

目录需求分析与系统设计核心功能模块开发安全与性能优化测试与部署方案项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析与系统设计 进行详细的需求调研&#xff0c;明确用户角色&#xff08;买家、卖家、管理员&#x…...

browser-use爆火:AI Agent接管浏览器,测试自动化正在被重构

导读 最近在实际项目和工具演进中&#xff0c;可以明显看到一个变化&#xff1a; AI 不再只是写代码&#xff0c;而是开始“直接干活”。 这款 browser-use开源工具非常厉害。它能让AI Agent&#x1f680;直接操控浏览器。实现网页任务自动化简单高效 (๑•̀ㅂ•́)و✧。该…...

告别Joplin!用MarkDownload+Obsidian打造你的网页剪藏工作流(附完整配置JSON)

从Joplin到Obsidian&#xff1a;用MarkDownload构建高效网页剪藏系统 每次在网上冲浪时遇到值得保存的内容&#xff0c;你是否也经历过这样的困境&#xff1f;收藏夹里堆满了再也找不到的链接&#xff0c;或是剪藏工具中杂乱无章的片段。作为一个长期依赖Joplin进行知识管理的用…...

5分钟解决经典游戏兼容性问题:DDrawCompat完整使用指南

5分钟解决经典游戏兼容性问题&#xff1a;DDrawCompat完整使用指南 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/DDraw…...

解锁毕业论文新姿势:书匠策AI,你的学术超级英雄!

在学术征途上&#xff0c;每一位即将毕业的大学生都怀揣着梦想与挑战&#xff0c;而毕业论文则是那座必须跨越的巍峨大山。面对这座大山&#xff0c;你是否曾感到迷茫、无助&#xff0c;甚至有些力不从心&#xff1f;别怕&#xff0c;今天&#xff0c;就让我带你认识一位学术界…...

Qwen3.5-4B-Claude-Opus-GGUF效果展示:TCP三次握手状态机推理

Qwen3.5-4B-Claude-Opus-GGUF效果展示&#xff1a;TCP三次握手状态机推理 1. 模型能力概览 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个专注于逻辑推理和结构化分析的轻量级AI模型。这个基于Qwen3.5-4B的蒸馏版本特别擅长处理需要分步骤解释的技术问题&#…...

C/C++进阶知识1.0

C/C进阶知识 1.delete与delete[ ] ClassA *pclassanew ClassA[5]; delete pclassa; 与 int *p new int[5]; delete p; 1.1内置类型 不调用析构函数 1.2自定义类型 析构函数调用一次 2.内存知识 2.1栈堆增长方向不同的原因&#xff1a; 栈向下增长堆向上增长的设计目的是…...

前端打印PDF避坑指南:用printJS搞定Base64流和批量打印(附完整代码)

前端PDF打印实战&#xff1a;Base64流处理与批量打印的工程化解决方案 每次遇到PDF打印需求&#xff0c;前端开发者总会面临各种意想不到的坑。从Base64流解码到跨浏览器兼容性处理&#xff0c;再到批量打印的性能优化&#xff0c;每个环节都可能成为项目进度中的"拦路虎&…...

CCS12.3.0保姆级教程:手把手教你为AWR6843AOP毫米波雷达新建工程(附完整配置参数)

CCS12.3.0零基础实战指南&#xff1a;AWR6843AOP毫米波雷达工程搭建全解析 第一次打开Code Composer Studio 12.3.0时&#xff0c;满屏的选项和参数确实容易让人望而生畏。特别是当你要为TI的AWR6843AOP毫米波雷达创建新工程时&#xff0c;那些关于Cortex R、DSP C67XX、mss/ds…...

TikTok爆火:C语言代码让电脑无硬件发无线电,靠谱吗?

一、刷爆TikTok的技术神操作&#xff0c;无硬件也能发无线电&#xff1f; 在2026年3月17日这天&#xff0c;有一条C语言创意短视频火爆了TikTok&#xff0c;在当日&#xff0c;它获得了10万以上的播放量&#xff0c;还有5万以上个点赞之举&#xff0c;成功登上了当日C语言创意应…...