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

`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


http://www.kler.cn/a/416989.html

相关文章:

  • 问题:通过策略模式+工厂模式+模板方法模式实现ifelse优化
  • 让office集成deepseek,支持office和WPS办公软件!(体验感受)
  • 网络协议/MQTT Paho.MQTT客户端库接口基础知识
  • 方舟字节码原理剖析:架构、特性与实践应用
  • pip3命令全解析:Python3包管理工具的详细使用指南
  • ndk 编译opencv(去除libandroid.so mediandk依赖)
  • deepin 安装 chrome 浏览器
  • 【Java基础入门篇】三、面向对象和JVM底层分析(2)
  • Artec Leo:航海设备维护的便携式3D扫描利器【沪敖3D】
  • Qt入门5——常用控件3
  • 六通道串口服务器
  • Unity XR Interaction Toolkit 开发教程:抓取交互【3.0以上版本】
  • 无人机的起降装置:探索起飞和降落的秘密 !
  • JS +CSS @keyframes fadeInUp 来定义载入动画
  • 【C语言】连接陷阱探秘(5):头文件
  • 在远程服务器和本地同步数据的指南
  • Java基于SSM框架的跑腿平台小程序【附源码、文档】
  • 【多线程-第一天-NSThread-线程的属性-线程的名称-线程的优先级 Objective-C语言】
  • LLM学习笔记(11)pipeline() 函数的幕后工作
  • 【娱乐项目】基于批处理脚本与JavaScript渲染视频列表的Web页面
  • MySQL 中 COUNT(1)、COUNT(*) 和 COUNT(列名) 的区别
  • Spring Boot 项目——分层架构
  • C++设计模式:装饰器模式 (Decorator) (咖啡订单系统)
  • c++哈希(开散列原理及实现)
  • BUUCTF—Reverse—Java逆向解密(10)
  • 警钟长鸣,防微杜渐,遨游防爆手机如何护航安全生产?