前端调试知识, 各种调试姿势

2023-11-18

在日常开发过程中,如果我们的程序出问题了,要找出是哪里导致的问题的时候,往往会遇到一个变量在10多20多个地方被改变了,然后找不到时哪一次的改变导致的异常;
笨的方法也有,就是每一个有可能改到的地方都加上一个console.log,通过log一个数字来判断,它执行到哪了,为什么只跑到那一步。这种方法的缺点也很明显,就是耗时耗力。

下面说方法:

1. 在相关的地方打debugger

debugger
debugger
这里可以看到运行到这里的时候, 就可以看到调用栈, 还有局部变量等等信息

2. 在页面上右键检查, 然后在右键dom元素, 选择break on:

  • 子树改变断点(文字改变等)
  • 属性改变断点(class改变等)
  • 节点被移除断点(remove节点事件)
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
这里可以看到是什么函数导致他改变的

3. 在F12上找到该JS, 相关地方点一下, 打断点

这个是最基础的, 控制台打断点
在这里插入图片描述

4. 使用vue的watch

这个方法可以监听参数的改变

  blogLists: {
      handler(newName, oldName) {
      // ...
        debugger;
      },
      deep: true, // 对象内的改动
      immediate: true
    }
  • deep: true, // 对象内的改动都可以监听到
  • immediate: true // 第一次进入的时候就调用监听

在这里插入图片描述

5. 使用Object.defineProperty

之前遇到一个坑, 就是在watch里面监听, 结果监听不到他的调用栈(调用方法), 实际上是由于vue的监听机制的实现导致的, 那一次是因为watch的变量param实际上没有改变, 导致没有调重新计算的方法, 导致计算的剩余量被初始化为0

思路就是使用 Object.defineProperty() 方法, 对vue的watch进行监听, 如果key值是param这个自定义变量, 重新定义set方法, 然后在里面设置debugger, 就可以看到是哪里改动了param这个变量.

说一下调试键

  • F8: 跳过这个断点, 进入下一个断点
  • F9: 一行一行执行
  • F10: 步进, 不进入函数内
  • F11: 步进, 进入函数内
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端调试知识, 各种调试姿势 的相关文章

  • 如何实时改变setInterval的速度

    我想知道如何实时更改 setInterval 的速度 例如 if score lt 10 repeater setInterval function spawnEnemy 1000 if score gt 10 repeater setIn
  • MailTo 从 Javascript

    我有一个链接按钮 用于从页面内容构建邮件 从 javascript 启动它而不打开空白窗口或干扰调用它的窗口的最佳方法是什么 function Email var sMailTo mailto var sBody var alSelecte
  • 使用 Jest 和 React JS TestUtils 测试表单

    我有一个带有 3 个单选按钮的表单 如下所示 假名
  • Eslint 从另一个文件确定全局变量

    我试图以这样的方式设置 ESLint 使其在对实际目标文件进行 linting 之前解析全局声明文件 这样我就不必将所有确实是全局的函数和变量声明为全局 而是让解析器弄清楚 In 一些 模块 js function do something
  • 使用 Firefox 插件 sdk 的 nsISocketTransportService

    我正在尝试使用 Firefox 来读取 SSH 横幅 IE 当您最初连接到 SSH 服务器时 服务器会向您发送其横幅 标识服务器软件 并且您向 SSH 服务器发送您的横幅 标识您的客户端软件 为此 我使用以下 URL 中的示例 firefo
  • 在随机位置启动 HTML5

    我有一个大约 2 小时长的音轨 我想在我的网站上使用它 我希望它在页面加载时在随机位置开始播放曲目 使用 HTML5 可以吗 我知道您可以使用 element currentTime 函数来获取当前位置 但是如何在完全下载之前获取曲目的总时
  • Mapbox GL 中的 MaxBounds 和自定义非对称填充

    我有一个 Mapbox GL JS 应用程序 在地图上显示一些小部件 为了确保地图上的任何内容都不会被它们隐藏 我使用以下命令添加了一些填充map setPadding 这是一个不对称的 在我的例子中左边比右边大 它按预期工作 例如fitB
  • 在 R 传单中添加不透明度滑块

    如何在 R leaflet 应用程序中添加滑块来控制特定图层的不透明度 对于这个应用程序 我不想使用闪亮 这里建议 在 R 传单应用程序中添加滑块 https stackoverflow com questions 37682619 add
  • 如何在不阻止触摸启动的情况下防止“过度滚动历史导航”?

    我正在实现基于滑动的导航 但我在使用 Chrome 时遇到了麻烦 当页面向右拖动时 会触发新实现的功能 过度滚动历史导航 从而导致跳回 到 历史 1 为了防止这种情况 我必须打电话 preventDefault on touchstart
  • 在javascript中访问函数内的实例变量?

    如何以最简单的方式访问函数内的实例变量 function MyObject Instance variables this handler Methods this enableHandler function var button doc
  • 这种类型注释在没有 TypeScript 的 React 代码中如何工作?

    我在看这段代码示例 https reacttraining com react router web example auth workflow在 ReactRouter 页面上 这篇文章很有趣 const PrivateRoute com
  • 此页面上的脚本导致 ie 运行缓慢

    问题就在标题中 IE 行为异常 并说有一个脚本运行缓慢 FF 和 Chrome 没有这个问题 我怎样才能找到问题所在 那个页面有很多JS 手动检查不是一个好主意 EDIT 这是我正在处理的一个项目的页面 但我需要一个工具来查找问题 End
  • 访问 nuxt 配置文件中的存储

    我想添加通过 Nuxt 静态生成的动态路由 我定义了一个客户端 服务器端存储asyncData方法 我想将这个存储值 一个数组 映射到我的nuxt config js文件使其成为 动态 静态 路线图nuxt generate命令 但如何访问
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • 如何在画布上所有其他内容后面绘制图像? [复制]

    这个问题在这里已经有答案了 我有一块画布 我想用drawImage在画布上当前内容后面绘制图像 由于画布上已经有内容 我正在使用字面上的画布来创建包含图像的画布 因此我无法真正先绘制图像 所以我无法使用drawImage在我呈现其余内容之前
  • 如何重复 ajax 请求,直到满足 RxJS Observable 的条件?

    我正在尝试重复请求 直到响应包含使用 RxJS 的数据 此时我想调用成功 或失败 处理程序 但我在使用 RxJS 时遇到了麻烦 这是我目前的方法 redux observable action observable mergeMap gt
  • Jwt 签名和前端登录身份验证

    我有这个特殊的 jwt sign 函数 Backend const token jwt sign id user id process env TOKEN SECRET expiresIn 1m res header auth token
  • d3.event.translate 在触摸设备的缩放上包含 NaN

    我使用 d3 为我的 svg 编写了一个自定义缩放函数 如下所示 Zoom behavior function myzoom xpos d3 event translate 0 ypos d3 event translate 1 vis a
  • 如何映射轮播的子项数组?

    我正在尝试将 Carousel 组件包装在映射对象数组周围作为组件的子级 目前我只能让映射创建映射对象的 1 个子对象 轮播需要像这样
  • 如何在运行脚本之前提交活动单元格中所做的更改? (Google 表格/Google Apps 脚本)

    我正在使用 Google Apps 脚本在 Google 表格中创建提交表单 该表单位于一页上 提交内容被移至第二个隐藏页面 当用户填写表单后 他们按下提交页面上的按钮以激活脚本 我遇到的问题是 当用户填写最后一个单元格然后单击按钮时 输入

随机推荐

  • 通俗易懂讲解区块链

    文章目录 一 区块链是什么 区块链的几个核心特点 1 去中心化 2 非常安全 3 不可篡改性 4 开放性 5 无第三方 6 匿名性 二 区块链与比特币的关系 三 通俗易懂解释区块链 1 民生领域 2 经济产业领域 3 政务领域 4 数字身份
  • B站马士兵python入门基础版详细笔记(6)

    前言 这篇文章是B站学习python入门基础班的视频的第五 六章内容 主要讲述的是列表 主要包括列表的创建 以及他的元素的增 删 查 改操作命令 一 列表的初始化 为什么要使用列表 列表就好比C语言中的数组 它可以在这个数组里面保存各种类型
  • 达梦数据库创建数据库实例、规划表空间

    1 创建数据库实例 1 1图形方式创建 到数据库安装目录 dm7 的 tool目录下 打开达梦数据库配置助手 dmdba localhost tool dbca sh 打开达梦数据库配置助手 选择创建数据库实例 点击 开始 如下图 创建数据
  • unity shader入门(一) 基本结构和变量声明

    文章目录 前言 Unity中shader相关的结构 什么是openGL和DirectX unity shader的分类 编写一个unity shader shader的基本结构 shader的property类型 在subshader中再次
  • Matlab 高斯信道下QPSK通带通信系统的简单仿真

    1 原理 2 仿真 3 总结反思 4 参考资料 1 原理 QPSK的具体内容请参考百度 QPSK的调制jie框图大致如下 QPSK信号可以采用正交调制的方式产生 如第一张图片的左半部分 I路信号与cos 信号相乘 Q 路信号与sin信号相乘
  • 【知识分享】机器学习的基本流程

    个人理解的机器学习简单流程如下 0 收集数据 1 对数据集进行预处理 2 划分数据集 训练集 测试集 验证集 3 训练 4 验证模型 对每个步骤详细解释 0 收集数据 可以使用之前学过使用爬虫对特定网页内容爬取 或在数据网页等信息网站上直接
  • [error] MFC错误不能将参数1从"const char [3]"转换为"const wchar_t *"

    在做项目中经常遇到很多错误 这里我仅仅把自己遇到的一些错误和解决方法写出 供自己和大家查看 代码如下 CRect rect GetClientRect rect CString str str Format ld rect bottom M
  • OpenCV Error: Assertion failed (type == B.type() && (type == CV_32FC1

    最近切换到64位系统上 运行以前的程序真是各种bug不停啊 主要还是系统位数导致的 先看下面这个错误 OpenCV Error Assertion failed type B type type CV 32FC1 type CV 64FC1
  • 解决ChatGML启动报错:RuntimeError: expected scalar type Half but found Float

    1 编辑web demo2 py文件 2 在原始命令加上 half 原始命令 model AutoModel from pretrained app model chatglm2 6b trust remote code True half
  • 如何优雅地实现 Excel 文件导出功能?(阿里出品的 EasyExcel,安利一波)

    EasyExcel 前言 导出是后台管理系统的常用功能 当数据量特别大的时候会内存溢出和卡顿页面 曾经自己封装过一个导出 POI百万级大数据量EXCEL导出 采用了分批查询数据来避免内存溢出和使用SXSSFWorkbook方式缓存数据到文件
  • 区块链技术详解

    区块链概述 区块链定义 区块链 是一个共享的 不可篡改的账本 旨在促进业务网络中的交易记录和资产跟踪流程 资产 可以是有形的 如房屋 汽车 现金 土地 也可以是无形的 如知识产权 专利 版权 品牌 几乎任何有价值的东西都可以在区块链网络上跟
  • 关于ROM,RAM,FLASH的个人理解

    RAM和ROM是指的存储介质 不是存储器 在硬件构造上不同 所以性质不同 但都是半导体存储介质 RAM是随机存取存储器 随机是什么意思呢 意思是 给定一个地址 可以立即访问到数据 访问时间和位置无关 RAM特点是掉电会丢失数据 但是RAM的
  • docker -toolbox host is not running 最简单解决方案

    很多小伙伴下载toolbox后 用gitbash运行docker machine start 可能会出现 docker host is not running的错误信息 其实我觉得就是无法启用虚拟机服务 打开虚拟机可以看到其实创建的虚拟机是
  • 小米手机安装linux视频教程,屏幕失灵的小米5手机安装linuxdeploy centos7记录

    几年前使用的小米5手机不知道什么时候屏幕失灵了 触摸任何地方都没有反应 幸好下面三个实体按键还是好的 就拿来安装一下linux系统 我到华强北去问了一下 修好屏幕至少需要100多块 这个手机卖旧手机也就是100块 懒得换屏幕盖板了 刚好前段
  • java sqlexception_java.sql.SQLException

    java sql SQLException ResultSet is closed是什么错误 java sql SQLException ResultSetisclosed是什么错误 java sql SQLException Result
  • 项目开发中开发文档出现的问题及其对策

    在常规项目开发管理中 很多项目专家都提出要用各种各样规范的文档对开发工作进行管理 但是在日常工作中 由于这些文档的编写的管理工作都是相当繁重的 以致让一线员工不能主动积极使用 更新这些文档 长期下来 这些管理型的 设计型的文档所发挥的作用就
  • Qt中SQLite3的增、删、改、查操作

    QT sqlite3 先说一下QT自带数据库sqlite3和另外用sqlite3插件的区别 他们的功能是一样的 但是代码就不一样了 QT对数据库具有完善的支持 不需要加任何其他插件就可以直接使用 但是如果你要是加了sqlite3插件 调用数
  • 解决: Message: invalid selector: Compound class names not permitted报错的问题

    对于出现消息 无效的选择器 不允许使用复合类名的问题 该页面解析 原始代码 self driver find element by class name s btn btn ok click 问题 代码出现如下清空 Traceback mo
  • Java Swing基础(层次结构,组件,布局管理)

    Swing基础层次结构 图形环境和图形对象 坐标 GUI组件的左上角坐标默认为 0 0 从左上角到右下角 水平坐标x和垂直坐标y增加 坐标的单位是像素 Graphics对象 专门管理图形环境 Graphics类是一个抽象类 抽象类Graph
  • 前端调试知识, 各种调试姿势

    在日常开发过程中 如果我们的程序出问题了 要找出是哪里导致的问题的时候 往往会遇到一个变量在10多20多个地方被改变了 然后找不到时哪一次的改变导致的异常 笨的方法也有 就是每一个有可能改到的地方都加上一个console log 通过log