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

在 Chrome DevTools 中调试 JavaScript 入门

在 Chrome DevTools 中调试 JavaScript 入门

如果您使用 console.log() 来查找和修正代码中的错误,可以考虑改用本教程介绍的工作流程。 其速度快得多,也更有效。

第 1 步:重现错误

重现错误始终是调试的第一步。“重现错误”是指找到一系列总是能导致错误出现的操作。

您可能需要多次重现错误,因此要尽量避免任何多余的步骤。

第 2 步:使用断点暂停代码

DevTools 让您可以暂停执行中的代码,并对暂停时刻的所有变量值进行检查。 用于暂停代码的工具称为断点。 立即试一试:

按 Command+Option+I (Mac) 或 Ctrl+Shift+I(Windows、Linux)在演示页面上打开 DevTools。

  1. 点击 Sources 标签。

  2. 点击 Event Listener Breakpoints 将该部分展开。DevTools 显示一个包含 Animation 和 Clipboard 等可展开事件类别的列表。

  3. 在 Mouse 事件类别旁,点击 Expand Expand 图标。

DevTools 显示一个包含 click 等 Mouse 事件的列表,事件旁有相应的复选框。 1. 选中 click 复选框。

返回至演示页面,再次点击 Add Number 1 and Number 2。DevTools 暂停演示并在 Sources 面板中突出显示一行代码。

clipboard.png

当您选中 click 复选框时,就是在所有 click 事件上设置了一个基于事件的断点。 点击了任何节点,并且该节点具有 click 处理程序时,DevTools 会自动暂停在该节点 click 处理程序的第一行。

注:这不过是 DevTools 提供的众多断点类型中的一种。应使用的断点类型取决于您要调试的问题类型。

第 3 步:单步调试代码

一个常见的错误原因是脚本执行顺序有误。 可以通过单步调试代码一次一行地检查代码执行情况,准确找到执行顺序异常之处。

clipboard.png

从左到右依次为:

  • 重置调试器,使用后会立即回复到未暂停的状态

  • 跳过函数调用, 使用后不会进入函数声明里,而是直接在当前函数里出结果

  • 单步, 通常情况下也会单步库代码

  • 直接从当前函数退出,将回退到上一个调用它的函数,这个一般用于函数体很长想要立即退出时使用

第 4 步:设置另一个断点

打完另外的断点后, 重置调试器会变成单步(只执行断点)的调试。

第 5 步:检查变量值

使用watch

clipboard.png

可以看出watch里可以填表达式。

第 6 步:应用修正

您已找到错误的潜在解决方法。剩下的工作就是编辑代码后重新运行演示页面来测试修正效果。 您不必离开 DevTools 就能应用修正。 您可以直接在 DevTools UI 内编辑 JavaScript 代码。 立即试一试:

  1. 在 DevTools 的 Sources 面板上的代码编辑器中,将 var sum = addend1 + addend2 替换为 var sum = parseInt(addend1) + parseInt(addend2);。它就是您当前暂停位置上面那行代码。

  2. 按 Command+S (Mac) 或 Ctrl+S(Windows、Linux)保存更改。代码的背景色变为红色,这表示在 DevTools 内更改了脚本。

  3. 点击 Deactivate breakpoints 停用断点。它变为蓝色,表示处于活动状态。 如果进行了此设置,DevTools 会忽略您已设置的任何断点。

  4. 点击 Resume script execution

  5. 使用不同的值测试演示页面。现在演示页面应能正确计算求和

切记,此工作流程只对运行在浏览器中的代码应用修正。 它不会为所有运行您的页面的用户修正代码。 要实现该目的,您需要修正运行在提供页面的服务器上的代码。

clipboard.png

注意要按一次保存

后续步骤

恭喜!现在您已掌握了在 DevTools 中调试 JavaScript 的基础知识。

本教程只向您介绍了两种设置断点的方法。DevTools 还提供了许多其他方法,其中包括:

  • 仅在满足您指定的条件时触发的条件断点。

  • 发生已捕获或未捕获异常时触发的断点。

  • 当请求的网址与您提供的子字符串匹配时触发的 XHR 断点。

相关文章:

  • IntelliJ IDEA 主题、字体、编辑区主题、文件编码修改
  • mediawiki登录时第一次会跳回登录页面,第二次才能登录成功
  • 更换好的yum源
  • 初识cesium----加载不同JSON格式例子
  • 《React Native高效开发》之create-react-native-app
  • 算法(Algorithms)第4版 练习 2.3.25
  • Matlab中imnoise函数的用法
  • docker 配置缓存代理服务apt-cacher-ng
  • TCP状态统计 - 脚本命令
  • Flask的Jinja2模板引擎 - 全局函数
  • 二叉树性质
  • Win10系列:C#应用控件基础2
  • Ubuntu下搭建tftp服务器最简单方法
  • PHP基础笔记【2】字符串操作
  • 深入分析Java单例模式的各种方案
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 0基础学习移动端适配
  • bearychat的java client
  • CAP 一致性协议及应用解析
  • es6要点
  • gulp 教程
  • node 版本过低
  • PAT A1017 优先队列
  • Python 基础起步 (十) 什么叫函数?
  • Python十分钟制作属于你自己的个性logo
  • Spring Cloud Feign的两种使用姿势
  • Vue.js 移动端适配之 vw 解决方案
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 翻译--Thinking in React
  • 复杂数据处理
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 深入浏览器事件循环的本质
  • 【云吞铺子】性能抖动剖析(二)
  • gunicorn工作原理
  • ionic异常记录
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (LeetCode 49)Anagrams
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (三) diretfbrc详解
  • (四)JPA - JQPL 实现增删改查
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)详解PHP处理密码的几种方式
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • **CI中自动类加载的用法总结
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET 中让 Task 支持带超时的异步等待
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET命名规范和开发约定
  • .Net转Java自学之路—基础巩固篇十三(集合)