前端必看!极具提效的网页 JS 调试技巧

本文详细介绍了如何使用JavaScript中的debugger关键字和浏览器开发者工具进行代码调试,包括手动设置断点、查看调用栈、理解作用域(Local、Script、Global)以及执行下一步的各种选项(Resume、Stepover、Stepinto、Stepout、Step)。此外,还提到了如何处理异步代码的调试差异以及错误时的断点设置策略。
摘要由CSDN通过智能技术生成

本文讲解如何使用浏览器提供的工具进行 JS 代码的断点调试。

大家好,我是前端西瓜哥。本文讲解如何使用浏览器提供的工具进行 JS 代码的断点调试。

debugger

在代码中需要打断点的地方,加上 debugger,表示一个断点。浏览器代码执行到该位置时,会停下来,进入调试模式。

示例代码:

function a() {
  let a_var = 'a';
  b(a_var);
}

function b(a_var_from_a) {
  debugger;
  console.log(global_var);
  let b_var = 'b';
  c();
}

function c() {
  let c_var = 'c';
}

let module_var = 'module';
var global_var = 'global';

a();

整体就是调用 a,然后 a 调用 b,b 调用 c,然后有各种作用域的变量。

记得打开开发者工具面板,没打开的话,debugger 会静默失败。

下面是断点后的样子。

现在是 a 函数调用了 b 函数,b 函数调用的时候用 debugger 加了个断点,于是我们就停在这里了。

此时上下文状态和调用站会保留着,方便我们排查是什么分支导致变量状态错误,比如一个错误的条件判断,让一个为 null 的变量没能变成一个普通对象,导致访问它的属性报错。

手动打断点

在对应的行号点一下就可以了,相当于加了个 debugger 关键字。

刷新页面后,手动打的断点还会保留。

调用栈信息

首先是函数调用栈信息。

调用的起始端是一个匿名函数,没有名字的函数都会显示 anonymouse,这里是 script 最外层的直接调用,所以没有名字。我本人建议多给匿名函数起个名字,可读性会更好。但如果你有起名困难症,不起也好。

匿名函数,然后调用了函数 a,函数 a 再调用了函数 b,然后停下了。之后还会调用 c。

看到 b 旁边的蓝色箭头没,它表示我们 正在观测哪个函数的上下文,默认会选择栈顶。

你可以用光标选择你要观测的函数下的变量,并且会高亮对应的代码。

作用域

我们看看某个函数的函数作用域的上下文。

找到 Scope 这个标签页,目前我们可以看到有三种类型:Local、Script 和 Global。

首先是 Local,本地作用域。这里对应 b 函数的上下文,可以看到(1)传入的变量,(2)函数内部声明的变量,以及 (3)this 值。

然后是 Script,表示一个模块文件的最外层变量,和全局变量不同,只能被模块文件内的文件的代码访问。

最后是 Global,全局作用域。

再补充一个比较常见的闭包作用域。如果一个函数是通过闭包产生的,那在 Local 和 Script 还会有一个闭包作用域。

在函数中访问一个变量,其实就是沿着这条链路去查找最先找到的那个,如果找不到就会拿到 undefined。

当然除了这些,还有不少,比如块作用域(Block)、捕获作用域(Catch Block)、Eval 作用域、With 块作用域等,篇幅原因,不一一介绍了。

执行下一步

实际我们还要看看代码是否如预期进入我们希望的分支并拿到正确的值,所以需要 让代码一点点执行下去,观察状态的变化。

浏览器提供了各种执行下一步代码的方式。

我们一个个过一遍。

Resume 恢复脚本执行

首先是最左边这个 矩形+三角形 的蓝色按钮,它表示 结束当前断点,恢复脚本运行。

但如果往下执行,又遇到一个断点,那又会进入调试模式。

于是在长循环的情况下,就出不来了(悲)。

这时候恼羞成怒的西瓜哥有个办法,长按这个按钮,然后出现一个停止按钮,点它会 结束所有的断点

或者更常见的做法是,只在特定判断条件下的打断点,比如:

todoItems.forEach(item => {
  // item 不可能为 null,我们来看看发生甚么事了
  if (!item) {
    debugger;
  }
  // ...
})

Step over 跳过下一个函数

然后是跳过下一个函数。就是遇到下一个要执行的函数,就不进去了,执行完它继续往下运行。

为什么要跳过函数?因为函数里面有很多代码,或者里面又调用了其他函数,要走好久才能回到当前函数。

如果我们只是想看当前函数的完整逻辑,那就跳过其下的函数执行。

Step into 进入下一个函数

如果走着走着遇到一个函数,进入这个函数。

注意,浏览器环境自带的 api 方法是进不去的。

Step out 跳出当前函数

如果你不想再看当前函数的执行了,想回到调用它的函数,就可以选择这个方式。

 

Step 下一步

就是普通的下一步,它会严格遵守代码的执行顺序,比较常用。

Step into 和 Step 的区别

Step into 和 Step 在大体的表现上有些相同,遇到函数是会进入函数内部的,但在异步代码下,行为有一些不同。

Step into 在遇到一个异步代码的回调函数,会直接挂起并让后面的同步代码继续跑,直到这个异步函数被执行,然后进入这个函数。

而 Step 则符合代码的执行顺序,先执行后面的同步代码,然后再执行异步函数。

我们用一个实例演示一下。代码为:

window.onclick = () => {
  debugger;
  setTimeout(() => {
    console.log('inside');
    console.log('p1', performance.now() / 1000);
  }, 2000);
  console.log('p2', performance.now() / 1000);
  console.log('p3', performance.now() / 1000);
};

Step into 的表现:

可以看到,Step into 会等待异步函数被执行,才进入到函数内部,然后停在它的首行。

然后是 Step:

Step 遵循正常的代码执行过程顺序:先走完同步代码,然后再进入异步代码。

直接跳到某一行

我们可能想直接跳到中间的一连串逻辑,直接走到后面的某一行,对此我们可以手动跳转。

具体做法是行号右键选择 continue to here。

需要注意,这个地方必须是和当前位置在同一个函数下,否则会等价于执行了 Resume。

其他

关闭断点功能

关闭断点功能(deactivate breakpoint)。

开启这个,断点在打开开发者工具的条件下无效。

 

上一篇文章西瓜哥说了一个用定时器不断执行 debugger 的方式,防止别人点点点看代码是怎么执行的。但这只能防小白,我们把这个开了就无视 debugger 关键字了。

报错时断点

代码报错时,我们希望知道报错那瞬间的上下文。

此时我们可以开启这个功能,在报错且没有被捕获时,浏览器会给你打一个断点,然后你可以看看哪个变量出了问题。

 

还可以勾选这个 Pause on caught exceptions,效果是错误被捕获时,打断点: 

 

短暂又灿烂的
关注 关注
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如何在chrome浏览器调试JS代码
猫敷雪
07-01 1919
断点。debugger 语句。error(如果开发者工具是打开状态,并且按钮 是开启的状态)。当脚本执行暂停时,我们就可以进行调试:检查变量,跟踪代码来查看执行出错的位置。开发人员工具中的选项比本文介绍的多得多。完整的手册请点击这个链接查看:https://developers.google.com/web/tools/chrome-devtools。本章节的内容足够让你上手代码调试了,但是之后,尤其是你做了大量关于浏览器的东西后,推荐你查看上面那个链接中讲的开发者工具更高级的功能。
必备的JS调试技巧汇总
10-21
本文将介绍一些JS调试技巧,帮助开发者提高调试效率。 ### 调试技巧汇总 #### 1. 使用Alert进行简单调试 在互联网初期,由于浏览器功能有限,开发者主要依靠`alert()`方法进行调试。`alert()`可以暂停代码执行,并...
前端必看】极大提高开发效率的网页 JS 调试技巧
fe_watermelon的博客
03-05 1102
大家好,我是前端西瓜哥。本文讲解如何使用浏览器提供的工具进行 JS 代码的断点调试
如何高效调试JavaScript代码:从Console到断点调试
最新发布
官方推荐
09-09 1万+
如何高效调试JavaScript代码:从Console到断点调试
关于网页js调试
我笔记
08-19 136
1.debugger 2.f12,相应js处打断点
JS调试
qq_52579508的博客
07-18 1131
2.1 DOM断点定位的比较准执行的比较靠前 距离加密函数比较远 我们无法根据栈 去快速定位格式化代码格式。
一探前端开发中的JS调试技巧
叶叶茵的博客
04-07 4007
js调试技巧
js调试工具,v7.5爬虫工程师必备
05-26
JavaScript是Web开发中的核心语言,尤其对于爬虫工程师而言,理解和掌握JS调试技巧至关重要。本文将详细介绍一款名为“编程喵JS调试工具”的版本7.5,它专为爬虫工程师设计,支持V8引擎和浏览器环境下的JS调试,...
鬼鬼js调试工具 js逆向必备
06-18
6. **调试技巧**:利用调试工具如Chrome DevTools或Firefox Developer Tools,结合断点、步进执行、查看变量值等功能,能够帮助我们逐行分析代码。而**鬼鬼JS调试工具**提供了更为专业和便捷的调试环境,特别适合...
在浏览器中调试 JavaScript
zsx0728的博客
06-12 2610
    在本教程中,您将借助示例了解 JavaScript 中的调试
js调试方法
cxxbzy的博客
11-22 312
过去调试JavaScript的方式 alert() console.log() 断点调试 断点调试是指自己在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。 调试步骤 浏览器中按F12-->sources-->找到需要调试的文件-->在程序的某...
19 JavaScript学习:调试
热门推荐
百锦再的博客
04-28 8万+
使用控制台:在浏览器的开发工中的控台输入代码实时查看的函数等信息,帮调试程序4. 使用调试工具一些开环境()或者浏览器插件提供了专门的调试工具,如Chrome DevTools、Firefox Developer Tools等,可以更,开发者可以发的错误,并及时修复,代码质量和开发效率。使用断点:在浏览器的开发者工具中设置断点,当程序执行到断点处时暂停执行,开发者可以查看当前变量的值、调用栈等信息,帮助定位问题。关键字可以手动触发断点,不需要依赖开发者工具中的设置断点功能,方便在代码中灵活地进行调试
JS 调试
Changkaix的博客
04-21 321
1. 双重循环:制作九九乘法表。 思路:(一共要执行9遍,每遍要执行多少次由第几遍决定) 代码: 效果: 2.break和continue的区别 (都表示终止执行) break (用于终止循环,在break后面的语句不再执行) continue(只能在循环结构中使用,退出本次循环,继续后面的循环) 3.调试代码的几种方法: 一 : alert 二: debugger 三:console.log(i) ...
js调试
weixin_45615623的博客
09-23 243
调试 alert() console.log()调试方式** debug-断点调试** 步骤 f12 —>source —>需要调试的文件 --> 设置断点 ​ watch:监视变量 ​ f10:程序单步执行 ​ f8: 跳到下个断点 数组的概念 所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。 数组...
js调试
xiaozhuangyumaotao的博客
05-21 168
作为一个程序员,不管你使用的编程语言是什么,也不管你在开发前端还是在开发后端,写的代码不可能是一气呵成并且一点错误也没有的,一般都要经过反复的修改与测试才能写出相对来说更健壮的程序代码,为了能让自己更快、更准确的定位到问题的bug所在,"调(tiao)试"就是必不可少的一个利器。js怎么调试呢?我们现在写的js程序都是在浏览器中运行的,调试也需要在浏览器中进行。下面是使用谷歌浏览器调试需要用到的地方,我都标了出来: 浏览器都是按f12就可以调出来上面的调试窗口了。在窗口里面可以看到变量当前的值,...
写文章

热门文章

  • vue-json-editor json编辑器 23534
  • css怎么设置背景图片自适应大小 18498
  • javascript中判断字符串中是否包含指定字符有多种方法 17583
  • JS中的map用法 16899
  • cnpm安装 15633

分类专栏

  • 优化方案 付费 38篇
  • 资源 付费 4篇
  • 上传文件 付费 2篇
  • 写字板组件 付费 1篇
  • 手写板 付费 1篇
  • 前端 266篇
  • vue 100篇
  • css 40篇
  • javascript 121篇
  • 方法 53篇
  • html 8篇
  • 面试题 8篇
  • 轮播图 1篇
  • 组件 4篇
  • promise 3篇
  • nuxt.js 5篇
  • uni-app 5篇
  • jquery 1篇
  • 图片加载失败 1篇
  • 跨域 1篇
  • 怎样获取从后端下载的文件 1篇
  • input上传文件 1篇
  • json 1篇
  • vue3.x 1篇
  • 源码 1篇
  • ElmentUI  1篇
  • 懒加载 1篇
  • 人性 1篇
  • react.js 2篇
  • 人际交往 1篇
  • python 3篇
  • http 1篇
  • 单点登录 1篇
  • react 11篇
  • seo 1篇
  • 自动生成vue页面 1篇
  • H5 1篇
  • 卡顿优化 1篇
  • emoji 1篇
  • emoji表情 1篇
  • vue3.0 4篇
  • 字体 3篇
  • font-family 3篇
  • idea
  • vue-cli3 1篇
  • css面试题大全 1篇
  • ide
  • textarea 1篇
  • elementui 1篇

最新评论

  • generator函数与async/await

    m0_57436369: Generator函数跟async,await毫无关系、、只是说他们是比较像的。Generator是独立于async,await的,你这文章太误人子弟了

  • vue实现聊天+图片表情功能

    m0_65115942: 光标那句代码换个位置就好了

  • VUE项目-H5端人脸识别功能实现

    djiq: 能实现录屏并发给后端吗

  • 使用Git上传本地代码到远程仓库(github)的指定分支

    胖达不胖啵: 写的太好啦!!!!很适合小白

  • 手把手教你实现Android真机远程截屏

    一清三白一: 请问第一步是怎么做的

最新文章

  • 解决vscode中git操作总是需要输入账号密码的问题
  • vue中实现拖拽排序功能的详细教程
  • css-纸页效果
2024年18篇
2023年78篇
2022年81篇
2021年490篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

短暂又灿烂的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家江西商场玻璃钢雕塑设计制作玻璃钢仿铜雕塑性价比公司玻璃钢雕塑生产方法山东玻璃钢仿铜雕塑定制舟山玻璃钢雕塑价位甘肃玻璃钢卡通雕塑公园开州区玻璃钢雕塑东莞玻璃钢卡通老鼠雕塑德州玻璃钢卡通雕塑厂家新化玻璃钢花盆花器浙江秋季商场美陈销售企业山西玻璃钢奶牛雕塑深圳定制玻璃钢雕塑联系方式有没有玻璃钢雕塑外发加工江苏农场迎宾玻璃钢雕塑揭阳古代玻璃钢人物雕塑重庆景观玻璃钢雕塑报价阜阳户内玻璃钢雕塑生产厂家圆柱形玻璃钢花盆厂家江门树脂玻璃钢雕塑生产厂家青州玻璃钢雕塑厂名单无机玻璃钢雕塑瓷厂汕头玻璃钢彩绘雕塑厂家河南标牌校园玻璃钢景观雕塑加工绍兴水果玻璃钢雕塑夏季商场中厅美陈四川周年庆典商场美陈售价芜湖设计玻璃钢雕塑报价唐山玻璃钢雕塑选哪家东莞玻璃钢雕塑价格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化