0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

前端调试实践

京东云 来源:jf_75140285 作者:jf_75140285 2025-03-11 15:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

在日常调试问题中,相信我们很多人都是用console去排查相关的问题,虽然问题也可以排查出来,但是有时它的效率并不高。这篇文章主要讲解关于断点和一些日常调试技巧的内容,方便你在日后调试问题中,能在不同的前端场景应用不同的调试方式,翻倍提高你解决问题的效率



1 sources面板概览

source面板是我们断点调试经常用的到的地方,我们可以先大概认识一下它长什么样子,大概有什么功能



•左侧区块:包含了Page、Overrides、Snippets等5个功能块,其中Page可以查看该网页已加载的所有资源

•中间区块:可查看、编辑资源文件,也可查看图片类型的文件;同时可在其文件左侧进行断点等相关操作

•右侧区块:断点调试时的区域,可以开始、下一步等断点操作,同时可以查看断点调试时的变量值、调用栈等信息

wKgZO2fP6OyAKbe7AAlKtBzM0Ww574.png



当展示开发者工具的区域过小时,它会自适应调整布局

wKgZPGfP6O2AVo_oAAOUURqOSyA310.png



2 常用的断点方式

我们平常最经常用的可能就是代码行断点了,但是有时用它调试问题并不是效率最高的。chrome中还包含了其他的断点方式,我们可以在不同的场景应用不同的断点进行高效调试。



2.1 代码行断点

代码行断点,当代码运行到当前行之前,代码会暂停执行



2.2.1 点击Sources面板中的源代码的行号

当行号列对应行出现蓝色图标,即为打断点成功。在右侧的Breakpoints中,会出现你有打断点的信息,展示了对应的行号,也可以让你取消、勾选、编辑、删除断点

wKgZO2fP6O6AHk4sAAVR5X0Wglg440.png



2.2.2 断点操作按钮含义

我们可以在右上角看到6个控制断点的操作按钮,分别对应着不同的操作

wKgZPGfP6O-AcG46AADc_q3Qahw820.png



wKgZO2fP6O-AHQ1BAAANqlFzrG0004.png

恢复执行



wKgZPGfP6PCADnqtAAAM28d8-mQ673.png

单步执行



wKgZO2fP6PGAXzH0AAAMgDmXfLg420.png

进入函数调用



wKgZPGfP6PKAdv_TAAANwBz5ny8088.png

跳出函数调用



wKgZO2fP6PKASor6AAAMnfR4HHc606.png

让该断点失效



2.2.3 行断点实战

在开发过程中,用例列表刚开始还可以加载出用例,怎么突然没有数据返回了。查看接口发现moduleIds参数出现了问题

wKgZO2fP6POAe0EHAAbKhzuBrtI810.png



于是对相关代码行设置了断点,当执行到149行的时候moduleIds的值是 [4611,5417]

wKgZPGfP6PWAc7A4AAYDbuRN-oE882.png



可当执行到152行的时候,moduleIds的值却是 [undefined]

wKgZO2fP6PWAeX8qAAO4N9sRAow694.png



原来是这两处逻辑冲突了,后面的逻辑覆盖了前面的逻辑

wKgZPGfP6PaAeRY3AAB0bsTh7KQ869.png



问题很快排查出来。如果用console.log的话,可能要在代码中写好几个console,保存后,刷新浏览器打印,排查完,可能还需要去删除掉,所以遇到一些问题排查效率就提高了许多



2.2 Logpoint日志点

有时候,我们并不需要像代码行断点一样,把我们的代码暂停。我们只需要像console打印一下相关的信息,不要中断我们的代码执行。这个时候我们logpoint就派上用场了,它的语法跟console.log一样,我们可以快速得写好我们的调试信息,而且不用像console.log一样干扰我们的代码,也不用过后还得惦记着去删除它



比如下面的logpoint,其会显示粉红色的图标,代码执行到它的时候,它会在console面板中打印

wKgZO2fP6PeAK8SaAAaiY1v7e5c164.png



注意,我们可以使用点击esc快捷键,快速得调起我们的console面板查看信息

wKgZO2fP6PiAQXSaAB1ajlhtwfY255.gif



2.3 异常断点

当我们的代码有错误,引发对应的异常报错时,我们有时会比较难快速定位到是在哪里出现了问题。我们可以利用异常断点,在发生异常的时候立即进行断点,从而快速找到发生问题的代码,并且可查看相关的变量、调用栈来帮助我们排查问题。



异常断点分为两种,可分别在在未捕获和已捕获的异常处进行断点



2.3.1 Pause on uncaught exceptions

比如下方代码中,aa要访问一个不存在的变量,这里是有问题的。这也是我们在代码中经常会遇到的问题

  const handleClick = () => {
    const aa = null;
    const bb = aa.size;
    setIsClicked(true);
  };



我们可以在Breakpoints中勾选Pause on uncaught exceptions,当代码执行到这些有异常的代码时,自然会暂停

wKgZO2fP6PqAAQ05AAHF2jvXddc362.png



wKgZO2fP6PuADmH6AEGaLeq9_fw218.gif



2.3.2 Pause on caught exceptions

下方代码已经异常进行了捕获,这种情况可以勾选Pause on caught exceptions来对捕获到异常代码行暂停进行处理

  const handleClick = () => {
    try {
      const aa = null;
      const bb = aa.size;
      setIsClicked(true);
    } catch (error) {
      console.error("1-zp-error:", error);
    }
    
  };



wKgZPGfP6P6ASp6WADn8o6P2MoA213.gif



2.4 事件监听器断点

当用户发生交互时出现问题,这时我们就可以添加事件监听器添加断点来捕获这些事件以检查交互时的问题。可以在Source面板右侧的Event Listener Breakpoints中勾选相应的事件

wKgZO2fP6QCAXmQtAADdr0miDbg214.png



2.5 DOM 更改断点

使用频率不高,研究如何操作dom的特定场景才有有用

wKgZPGfP6QGAcYkmAAcmlQkHU60940.png



3 调用栈

当我们在查看、调试一段比较复杂的代码时,我们有时很难快速得从代码文件理清其调用关系。此时,我们可以利用调用栈来帮助我们快速理清逻辑,快速排查问题



3.1 栈

栈是一种数据结构,其内部的的元素满足后进先出的特点,我们可以对其进行入栈、出栈的操作

wKgZO2fP6QKATJLvAABWoGGKh2U197.png



3.2 调用栈的应用

比如我在caseReviewListTable文件的第206行代码中打了一个断点,当代码执行到这部分逻辑的时候,他就自然会暂停

wKgZPGfP6QSATpDjAAeBmSq3qA0486.png



我们此时可以看到右侧的Call Stack中从上到下排列着函数调用栈信息,如下图我们可以查看到,在执行到该断点的时候,我们已经先在其他文件的handleRefreshCaseReviewList、handleSearchCase函数中执行过相关代码了。我们可以点击函数名右侧的文件地址,快速查看对应的代码,这样子,我们对其调用逻辑清晰了许多,排查问题的效率自然会提高

wKgZO2fP6QWAYWJhAAVZf3hkM3A873.png



3.3 anonymous 匿名的

我们在看上面的代码中,发现有一个anonymous栈帧,他代表了是一个匿名函数,即没有名称的函数

wKgZPGfP6QWAEmWhAARBGEirj-Q587.png



比如下面代码我们加个 setTimeout,也会在调用栈生成一个anonymous的栈帧

wKgZO2fP6QaAfiTCAAVzW975oSU540.png



3.4 console.trace()

除了通过断点来查看调用栈,有时我们也使用 console.trace() 来输出当前的函数调用关系,比如我们在下面代码对应的位置加上console.trace(),我们就可以看到其当前位置的调用栈信息

wKgZPGfP6QeAeI03AAUmCGtp0tU013.png



4 Snippets

在浏览器中,如果你在调试中,有一些公共的逻辑需要经常用到,你可以把其代码片段保存在Snippets中。当你在任何一个页面需要运行它的时候,可以直接运行它



比如我们想要获取当前页面的所有图片链接,我们可以将这段代码存储起来

wKgZO2fP6QiACePGAAKt7yNmAWA576.png



需要用的时候,我们直接快捷键Command+P,输入!字符,搜索你要执行的代码片段名称,选择以后即可执行

wKgZPGfP6QmAR1SFAArjQxJw2GQ687.gif



5 Overrides

5.1 替换响应内容

如果有些异常数据导致页面发生问题,我们可以直接利用那份异常数据,在本地进行调试。当然,如果后端接口还没好,我们知道结构也可以mock数据



比如我们现在有一个/api/v2/review/list/getCaseReviewList接口

wKgZO2fP6QqAIwFdAAIR_ONtacU721.png



我们右键,选择Override content替换接口内容

wKgZPGfP6QuAZalmAAY5QP0K8n0802.png



选择以后,会需要你选择一个存储这些替换文件的文件夹

wKgZO2fP6QyAUVIqAAPMIDbD_LM219.png



授权

wKgZPGfP6Q2ARYR9AACuZ8yjfBo793.png



我们将我们的模拟数据填充在这里,即可在页面中调试我们的UI和相关逻辑了

wKgZO2fP6Q6ATzueAAS8PTjk_h4852.png



其中,被覆盖的接口会显示紫色的标识

wKgZPGfP6Q6AJrw1AALSLnQSkLM363.png



如果我们不需要了,根据情况禁止、删除、清空都可以

wKgZO2fP6Q-AN0Y1AAGO9JZlG1s537.png



5.2 替换响应头

如果有些场景,需要添加或者修改响应头,也可以进行自定义修改

wKgZPGfP6RCAaZABAAb_qmzGTKU265.png



选择Add header,然后自己添加修改对应的响应头数据

wKgZO2fP6RGAG9PmAAP6SStEfyc168.png



6 其他调试技巧

6.1 复制、粘贴、拖拽元素

当产品需要对已经开发好的页面进行一些位置的移动调整的时候,我们可能对代码有一个比较大的改动才可以给她看到效果,但是过后我们又得把代码改回去。这时,我们可以利用chrome提供给我们的能力,复制元素、粘贴以及拖拽元素,来实现快速的页面布局调整,给产品看到效果,又不需要改代码



比如我们复制今日工作这个区块,然后粘贴在你需要放置的位置容器下进行粘贴

wKgZPGfP6ROAfBVnAAex_7ntCdM220.png



粘贴以后,我们长按元素,进行拖拽调整位置即可

wKgZO2fP6RSAThJFAAkmCCTtpYQ881.png



6.2 全局搜索

6.2.1 全局搜索文件/目录

当我们要快速调试一个文件的代码的时候,直接按Command+P快捷键调起搜索浮层,输入文件名或者文件路径名,即可快速找到对应的文件,选择点击以后会到达sources面板打开对应的文件

wKgZPGfP6RSAOj7CAAG74Nf2qTg602.png



6.2.2 全局搜索代码

当我们有对应的代码关键词,想打开它对应的文件。chrome提拱了一个全局搜索代码的功能,我们可以打开对应的search面板

wKgZO2fP6RWAbK6uAAHTHM-GqKo023.png



比如我输入“name: '计划列表',”这个关键词,它会在这个页面已经引入的资源搜索对应的代码关键词,然后把匹配的文件展示在下方,我们就可以立即选择然后打开对应的代码文件了

wKgZPGfP6RaAUZSjAAFYYJ_7ENI477.png



6.3 网站样式风格概览 CSS Overview

当我们看到一些优秀的网站的时候,我们想快速查看借鉴该网站样式信息的时候,我们可以借助CSS Overview这个功能快速得到相关信息,非常好用有趣



比如我们拿花瓣这个网站做例子,我们打开开发者工具,开启CSS Overview面板

wKgZO2fP6ReAO-ktAB0Z8OYUQvU499.png



然后按“Capture overview”开始收集信息

wKgZPGfP6RiAMIWSAAEffIKBw2w355.png

收集好以后,我们便可以从颜色、字体等维度获取到该网站的样式信息

wKgZO2fP6RmAOAekAAJwP4RNFyM997.png



另外,当我们点击对应的色块的时候,它也会列出用到的地方,点击对应的元素也会快速定位过去

wKgZPGfP6RqASlfrAAjfd6CZgZ8088.png



6.4 折叠屏手机适配

如果我们的开发场景中,需要适配折叠屏手机,比如像下面的三星Galaxy Z Fold5,那么我们的chrome也可以派上用场

wKgZPGfP6RuASGTCACOXHeS9k7U777.gif

三星Galaxy Z Fold5



我们需要进入对应的移动端调试模式,选择对应的移动端设备

wKgZO2fP6R6AWLQFAAnTgS9AIAw493.png



选择折叠场景,然后我们即可进行调试了

wKgZPGfP6R-ALVdRAAObRrKD5-U930.png



调试Surface Duo设备

wKgZO2fP6SCALCIYAAJfqL7ff3s926.png



wKgZPGfP6SGABavmAAOmQH08r0g968.png



7 学习资源分享

前面讲了这么多,其实只是抛砖引玉,还有很多东西是我们没有讲到的,我们可以通过下面的渠道进一步的了解、应用相关的知识和工具



7.1 Chrome DevTools

包含了Chrome 开发者工具相关功能的详细介绍还有相关的实践应用场景



7.2 Google Chrome Developers - YouTube

Google Chrome Developers的YouTube频道,视频展示了相关的新功能以及最佳实践



7.3 浏览器工作原理与实践

极客时间这门课从浏览器的渲染、javascript执行机制、V8工作原理、安全等相关视角去讲解浏览器的相关内容,从而让我们对前端的体系有一个更全的理解



8 总结

本文介绍了断点调试、sources面板和日常使用到的一些调试技巧,帮助我们在后续的开发中,提供一些新角度、新方式来解决问题,翻倍提高我们的开发效率

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 调试
    +关注

    关注

    7

    文章

    623

    浏览量

    35383
  • 前端
    +关注

    关注

    1

    文章

    241

    浏览量

    18672
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    模拟前端芯片是做什么的(什么是模拟前端芯片)

    模拟前端芯片,常简称为AFE,是位于信号处理链最前端的集成电路。它负责接收、调理和转换来自传感器或其他信号源的模拟信号,如电压、电流、温度、压力等,并将其转换为高精度的数字信号,供后续的数字
    的头像 发表于 11-21 14:33 164次阅读

    射频前端的反内卷之路

    近期随着卓胜微和唯捷创芯半年报公布,两家头部射频前端公司扣非后净利润都出现不同程度的亏损,一时间关于射频前端内卷和关于射频卷到“血流成河”的文章不断爆出,笔者采访了多位未上市或者在上市准备阶段的射频
    的头像 发表于 08-29 10:39 503次阅读

    2.4 GHz 无线 LAN 前端 skyworksinc

    电子发烧友网为你提供()2.4 GHz 无线 LAN 前端相关产品参数、数据手册,更有2.4 GHz 无线 LAN 前端的引脚图、接线图、封装手册、中文资料、英文资料,2.4 GHz 无线 LAN 前端真值表,2.4 GHz 无
    发表于 06-30 18:32
    2.4 GHz 无线 LAN <b class='flag-5'>前端</b> skyworksinc

    WCDMA/HSDPA/HSUPA 前端模块 skyworksinc

    电子发烧友网为你提供()WCDMA/HSDPA/HSUPA 前端模块相关产品参数、数据手册,更有WCDMA/HSDPA/HSUPA 前端模块的引脚图、接线图、封装手册、中文资料、英文资料,WCDMA
    发表于 06-24 18:29
    WCDMA/HSDPA/HSUPA <b class='flag-5'>前端</b>模块 skyworksinc

    前端模块 WCDMA/HSDPA/HSUPA skyworksinc

    电子发烧友网为你提供()前端模块 WCDMA/HSDPA/HSUPA相关产品参数、数据手册,更有前端模块 WCDMA/HSDPA/HSUPA的引脚图、接线图、封装手册、中文资料、英文资料,前端模块
    发表于 06-23 18:34
    <b class='flag-5'>前端</b>模块 WCDMA/HSDPA/HSUPA skyworksinc

    前端模块 WCDMA/HSDPA skyworksinc

    电子发烧友网为你提供()前端模块 WCDMA/HSDPA相关产品参数、数据手册,更有前端模块 WCDMA/HSDPA的引脚图、接线图、封装手册、中文资料、英文资料,前端模块 WCDMA/HSDPA真值表,
    发表于 06-23 18:34
    <b class='flag-5'>前端</b>模块 WCDMA/HSDPA skyworksinc

    2.4 GHz 前端 skyworksinc

    电子发烧友网为你提供()2.4 GHz 前端相关产品参数、数据手册,更有2.4 GHz 前端的引脚图、接线图、封装手册、中文资料、英文资料,2.4 GHz 前端真值表,2.4 GHz 前端
    发表于 06-20 18:31
    2.4 GHz <b class='flag-5'>前端</b> skyworksinc

    2.4 GHz WLAN 前端模块 skyworksinc

    电子发烧友网为你提供()2.4 GHz WLAN 前端模块相关产品参数、数据手册,更有2.4 GHz WLAN 前端模块的引脚图、接线图、封装手册、中文资料、英文资料,2.4 GHz WLAN 前端模块真值表,2.4 GHz W
    发表于 06-17 18:35
    2.4 GHz WLAN <b class='flag-5'>前端</b>模块 skyworksinc

    硬件调试:JLink 驱动配置与调试技巧

    调试器的工作原理、驱动配置流程、调试环境搭建、断点设置、寄存器与内存调试调试日志分析等方面,结合实际应用案例,旨在为硬件工程师和技术开发人员提供一份具有学术价值和
    的头像 发表于 06-12 23:20 1272次阅读
    硬件<b class='flag-5'>调试</b>:JLink 驱动配置与<b class='flag-5'>调试</b>技巧

    2.4 GHz 前端模块 skyworksinc

    电子发烧友网为你提供()2.4 GHz 前端模块相关产品参数、数据手册,更有2.4 GHz 前端模块的引脚图、接线图、封装手册、中文资料、英文资料,2.4 GHz 前端模块真值表,2.4 GHz
    发表于 06-10 18:32
    2.4 GHz <b class='flag-5'>前端</b>模块 skyworksinc

    数字IC设计:方法、技巧与实践

    主要内容: 芯片设计的背景知识 芯片设计流程和工具 构架(ARCHITECTURE)设计 RTL级设计和仿真 逻辑综合和相关技术 芯片设计的项目管理 本文内容主要是数字芯片前端设计,不涉及模拟
    发表于 05-28 16:06

    5 GHz WLAN 前端模块 skyworksinc

    电子发烧友网为你提供()5 GHz WLAN 前端模块相关产品参数、数据手册,更有5 GHz WLAN 前端模块的引脚图、接线图、封装手册、中文资料、英文资料,5 GHz WLAN 前端模块真值表,5 GHz WLAN
    发表于 05-27 18:32
    5 GHz WLAN <b class='flag-5'>前端</b>模块 skyworksinc

    用于 LTE 和 NR 的前端模块 skyworksinc

    电子发烧友网为你提供()用于 LTE 和 NR 的前端模块相关产品参数、数据手册,更有用于 LTE 和 NR 的前端模块的引脚图、接线图、封装手册、中文资料、英文资料,用于 LTE 和 NR 的前端模块真值表,用于 LTE 和
    发表于 05-08 18:30
    用于 LTE 和 NR 的<b class='flag-5'>前端</b>模块 skyworksinc

    揭秘Chrome DevTools:从原理到自定义调试工具

    引言 Chrome DevTools 是前端开发者的必备工具,不仅可以用于调试 Chrome 网页,还支持 Android WebView、 Roma (跨平台开发框架) 安卓&鸿蒙端 等平台的调试
    的头像 发表于 03-04 14:49 1209次阅读
    揭秘Chrome DevTools:从原理到自定义<b class='flag-5'>调试</b>工具

    前端的作用

    前端的作用 在智能手机中,“前端”一词可以指代两个不同的概念:手机前端开发和射频前端技术。以下是这两个概念在智能手机中的作用: 手机前端开发
    的头像 发表于 01-03 14:03 885次阅读