前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >调试用到的几种断点

调试用到的几种断点

作者头像
赤蓝紫
发布于 2023-03-29 02:41:13
发布于 2023-03-29 02:41:13
1.4K00
代码可运行
举报
文章被收录于专栏:clzclz
运行总次数:0
代码可运行

调试用到的几种断点

VSCode

1. 条件断点

顾名思义,就是只有满足条件才会中断的断点。

1.1 表达式断点

在表达式结果为真时中断。

简单使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function add(a, b) {
  return a + b;
}

add(1, 2);
add(2, 3);

首先,添加普通的断点。

可以看到会断两次,但是如果添加的是条件断点的话,就可能不是断两次了。

另外,VSCode的断点是即添(改)即用的,所以配合条件断点能干很多事情:

1.2 命中次数中断

当命中次数满足条件才会中断。

\color{red}{不能只是输入一个数字,而应是== 9> 9这种形式}

2. 记录点

断点命中时记录的信息。直接输入的内容会当成字符串来处理,要输入表达式的话,需要用{}包住。

\color{red}{条件节点和记录点不能混合使用,混合使用,记录点会失效。}

实际上,记录点和console效果基本一样。不过,记录点并不会污染代码。

3. 异常断点

出现异常后才会中断的断点。会分为捕获和未捕获两种。

异常断点的好处自然就是能够知道出现异常时的一些变量信息、调用堆栈信息。

4.内联断点

只有当执行到与内联断点关联的行时,才会命中内联断点。(不知道为什么网上都说是列)

把光标移动到要断的位置,然后点击Shift + F9。或者点击运行>新建断点

内联断点比较适合调试一行中包含多个语句的代码,比如for循环,可以等到满足条件时,再进入循环体。这时候,调试自由度比条件断点要高一点点。

Chrome

这部分介绍的是Chrome提供的一些断点。但是,也是可以通过VSCode去调试的,只不过需要在Chrome中设置断点。(下面为了方便录屏就不用VSCode来调试了)

1. 事件断点

添加事件断点后,当触发该事件时,就会中断。可以用于查看一下组件库触发事件后会进行哪些操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button onclick="handleClick()">click</button>

<script>
  function handleClick() {
    let a = 3;
    let b = 4;

    console.log(a + b);
  }
</script>

2. DOM断点

DOM断点的设置并不是在Sources面板中,而是在Elements面板中选中DOM元素,右键,选择Break on设置,一共有三种类型。

2.1 subtree modifications(子树修改)

当前选择的节点的子节点被移除或添加,以及子节点的内容(不包括属性)更改时触发。

HTML:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="father">
  <div class="son">son</div>
</div>

<button onclick="handleRemove()">remove</button>
<button onclick="handleAdd()">add</button>
<button onclick="handleChange()">change</button>

CSS

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
  .father {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 200px;
    height: 200px;
    background-color: pink;
  }

  .son {
    width: 100px;
    height: 100px;
    background-color: purple;
    line-height: 100px;
    text-align: center;
    color: #fff;
  }
</style>

JavaScript:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
  const father = document.querySelector('.father');
  const son = document.querySelector('.son');

  function handleRemove() {
    father.removeChild(son);
  }

  function handleAdd() {
    father.appendChild(son);
  }

  function handleChange() {
    son.textContent = 'ccc';
  }
</script>

首先,设置好断点。

接着,点击三个按钮的其中一个都会中断。

2.2 attribute modifications(属性修改)

当前节点添加、删除、更改属性值时触发。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <style>
    div {
      width: 100px;
      height: 100px;
      text-align: center;
      line-height: 100px;
    }

    .bg {
      background-color: pink;
    }
  </style>
</head>
<body>
  <div data-name="clz">
    clz
  </div>

  <button onclick="handleAdd()">add</button>
  <button onclick="handleRemove()">remove</button>
  <button onclick="handleChange()">change</button>

  <script>
    const div = document.querySelector('div');

    function handleAdd() {
      div.classList.add('bg');
    }

    function handleRemove() {
      div.classList.remove('bg');
    }

    function handleChange() {
      div.setAttribute('data-name', 'czh');
    }
  </script>
</body>
</html>

和子树修改基本一样操作。

2.3 node removal (节点移除)

当前节点被移除时触发。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <style>
    div {
      width: 100px;
      height: 100px;
      text-align: center;
      line-height: 100px;
    }
  </style>
</head>
<body>
  <div>
    clz
  </div>
  <button onclick="handleRemove()">remove</button>

  <script>
    const div = document.querySelector('div');

    function handleRemove() {
      div.parentElement.removeChild(div);
    }
  </script>
</body>
</html>

顺带一提:DOM断点能同时添加多种类型。

3. 请求断点

当发送请求的时候中断。如果不输入内容则是所有请求都中断,如果输入内容,则是当url中包含该内容的请求会中断。

请求断点不会考虑请求能不能发送到服务器。而是在发送请求的时候中断。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fetch("http://localhost:8088/getInfo")
.then((res) => {
  console.log(res);
});

fetch('http://localhost:8088/postInfo', {
  method: 'POST'
})
.then((res) => {
  console.log(res);
})

所有请求都中断:

只有url包含给定内容的请求才会被中断:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
BOM大详解
了解: 1.BOM架构全局对象的使用. 2.根据案例来讲解 3:大总结。 4;效果.
贵哥的编程之路
2020/11/06
5220
JavaScript进阶内容——DOM详解
JavaScript使我们有能力创建动态页面,而事件就是被JavaScript所侦测到的行为。
秋落雨微凉
2022/10/25
1.5K0
JavaScript进阶内容——DOM详解
【如果你要学JS XII】——使用js实现模态框拖动
这篇文章来实现一下js中的放大镜效果,以及如何实现模态框拖动效果 先来了解一下offset,client和scroll系列属性
像素人
2023/12/25
3200
【如果你要学JS XII】——使用js实现模态框拖动
「Web编程API」- 03
请注意,本文编写于 2091 天前,最后修改于 174 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
1.5K0
「Web编程API」- 03
前端成神之路-WebAPIs03
node.removeChild() 方法从 node节点中删除一个子节点,返回删除的节点。
海仔
2020/12/29
3K0
div.offsetLeft offsetTop详解
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin: 0; padding: 0; }
贵哥的编程之路
2020/10/28
8350
offsetParent
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>55-JavaScript-offsetParent</title> <style> *{ margin: 0; padding: 0; } .grand-father{ width: 300px; he
贵哥的编程之路
2020/10/28
4960
js中offset系列、client系列、scroll系列和screen系列详解
element.offsetTop: 返回元素距离带有定位的父元素的顶部的距离,如果所有父级元素没有则默认为浏览器的body区域; element.offsetLeft: 返回元素距离带有定位的父元素的左侧的距离,如果所有父级元素没有则默认为浏览器的body区域; element.offsetWidth: 返回元素大小,元素内容宽度 + padding值 + border值; element.offsetHeight: 返回元素大小,元素内容高度 + padding值 + border值;
IT工作者
2022/05/12
6690
JavaScript基础②
console.log(item)//点哪里,item的值就是你点击对应的currentvalue console.log(index)//点哪里,index的值就是你点击对应的索引
ymktchic
2022/01/18
1.1K0
JavaScript基础②
前端day16-JS(WebApi)学习笔记(事件补充、事件冒泡与捕获)
var code = e.keyCode || e.charCode || e.which;
帅的一麻皮
2020/05/05
1.8K0
js基本操作
js操作页面三步骤 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>操作页面的三步骤</title> </head> <body> <h1>操作页面的三步骤</h1> <div class="box"> <h1>box h1</h1> </div> </body> <script> // 1、获取页面标签 // 2、设置操作的激活条件 - 事件 // 3、具
小小咸鱼YwY
2019/09/11
4.4K0
三、jQuery属性操作
2、如何操作属性 对象.属性名称 = 值 对象.属性名称 对象[‘属性名称’] = 值 对象[‘属性名称’] Javascript
Dreamy.TZK
2020/06/16
3.9K0
三、jQuery属性操作
jQuery基础
使用jQuery时, $ 是访问jQuery的标志,但是如果有其他方法与jQuery中的 $冲突时,可以释放$的使用权 ,还可以自定义一个符号来代替 $使用。
不愿意做鱼的小鲸鱼
2022/08/24
1.8K0
jQuery基础
jQuery第二十篇 位置和尺寸操作的方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin: 0; padding: 0; } .father{ width: 200px; height: 200px; background:
贵哥的编程之路
2020/10/28
4070
【如果你要学JS <16>】—— 表单元素的属性操作,密码显示隐藏的实现.
根据早中晚不同时间,进行一个判断,然后再进行一个事件的改变,近而可以从不同时间段获得不同的图片状态
像素人
2023/12/30
3520
【如果你要学JS <16>】—— 表单元素的属性操作,密码显示隐藏的实现.
事件基础及操作元素
JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为。
星辰_大海
2020/09/30
1.5K0
要实现60FPS动画, 你需要了解这些
60FPS, 即每秒渲染60帧, 每一帧的间隔时间为 1000ms / 60 = 16.666ms
木子星兮
2020/09/15
1.4K0
要实现60FPS动画, 你需要了解这些
【如果你要学JS <19>】——动画效果
动画对于我们来说都不陌生,css里面就有很多动画,2d,3d等各种动画,本篇主要是如何使用js实现动画效果,如果本篇文章对你有帮助,点赞支持一下吧!
像素人
2024/01/03
3200
【如果你要学JS <19>】——动画效果
38·灵魂前端工程师养成-[项目]让皮卡丘动起来
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
3330
38·灵魂前端工程师养成-[项目]让皮卡丘动起来
前端day12-JS(WebApi)学习笔记(操作元素属性,事件介绍)
硬盘代码读取到内存 -> 浏览器渲染引擎生成DOM树(document) -> 开始渲染页面
帅的一麻皮
2020/04/16
1.6K0
前端day12-JS(WebApi)学习笔记(操作元素属性,事件介绍)
相关推荐
BOM大详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档