前端学习记录
  • 前言及目录
  • 前端基础
    • HTML
    • CSS
      • CSS学习之布局
    • JavaScript
      • 跟着月影学JavaScript
      • JavaScript之对象、原型链及继承
      • JavaScript中的类
      • onclick与addEventListener区别
      • JS手撕题
    • HTTP与浏览器
      • HTTP实用指南
      • Web开发的安全之旅
    • 通用知识
      • 前端必须知道的开发调试知识
      • 前端设计模式应用
      • Web 标准与前端开发
  • 数据结构及算法
    • 数据结构
      • 1、线性表(List)
      • 2、堆栈(Stack)
      • 3、队列(Queue)
      • 4、二叉树(Binary Tree)
      • 5、二叉搜索树与平衡二叉树(BST & AVL)
      • 6、堆(Stack)& 哈夫曼树 & 并查集
      • 7、图(Graph)
        • 图论——解决最小生成树问题(Kruskal算法&Prim算法)
      • 8、排序(sort)
      • 9、散列表(hash)
      • 数据结构习题
        • 第一周:最大子列和算法、二分查找
        • 第二周:线性结构
        • 第三周:栽树(二叉树等)
        • 第四周:二叉搜索树&二叉平衡树
        • 第五周:堆&哈夫曼树&并查集
        • 第六周:图(上)连通集 、DFS&BFS
        • 第七周:图(中)Floyd算法求最短路
        • 第八周:图(下)
        • 第九周:排序(上)归并&堆排序
        • 第十周:排序(下)
        • 第十一周:散列查找 & KMP
    • CS基础
      • 编译原理 实验一 词法分析器设计
      • 编译原理 实验二 LL(1)分析法程序
    • LeetCode
      • 冲刺春招-精选笔面试 66 题大通关
        • day1:21. 合并两个有序链表、146. LRU 缓存、25. K 个一组翻转链表
        • day2:14. 最长公共前缀、3. 无重复字符的最长子串、124. 二叉树中的最大路径和
        • day3:206. 反转链表、199. 二叉树的右视图、bytedance-016最短移动距离
        • day4:1. 两数之和、15. 三数之和、42. 接雨水
        • day5:7. 整数反转、215. 数组中的第K个最大元素、23. 合并K个升序链表
        • day6:33. 搜索旋转排序数组、54. 螺旋矩阵、bytedance-006. 夏季特惠
        • day7:53. 最大子数组和、152. 乘积最大子数组、41. 缺失的第一个正数
        • day8:20. 有效的括号、200. 岛屿数量、76. 最小覆盖子串
        • day9:105. 从前序与中序遍历序列构造二叉树、103. 二叉树的锯齿形层序遍历、bytedance-010. 数组组成最大数
        • day10:94. 二叉树的中序遍历、102. 二叉树的层序遍历、394. 字符串解码
        • day11:415. 字符串相加、5. 最长回文子串、72. 编辑距离
        • day12:64. 最小路径和、300. 最长递增子序列、bytedance-004. 机器人跳跃问题
        • day13:88. 合并两个有序数组、31. 下一个排列、4. 寻找两个正序数组的中位数
        • day14:121. 买卖股票的最佳时机、56. 合并区间、135. 分发糖果
        • day15:232. 用栈实现队列、22. 括号生成、128. 最长连续序列
        • day16:bytedance-007. 化学公式解析、129. 求根节点到叶节点数字之和、239. 滑动窗口最大值
        • day17:141. 环形链表、236. 二叉树的最近公共祖先、92. 反转链表 II
        • day18:322. 零钱兑换、198. 打家劫舍、 bytedance-003. 古生物血缘远近判定
        • day19:160. 相交链表、143. 重排链表、142. 环形链表 II
        • day20:704. 二分查找、43. 字符串相乘、bytedance-002. 发下午茶
        • day21题目:69. x 的平方根、912. 排序数组、887. 鸡蛋掉落
        • day22:151. 颠倒字符串中的单词、46. 全排列、2. 两数相加
      • 剑指 Offer
        • 剑指offer day1 栈与队列(简单)
        • 剑指offer day2 链表(简单)
        • 剑指offer day3 字符串(简单)
        • 剑指offer day4 查找算法(简单)
        • 剑指offer day5 查找算法(中等)
        • 剑指offer day6 搜索与回溯算法(简单)
        • 剑指offer day7 搜索与回溯算法(简单)
        • 剑指offer day8 动态规划(简单)
        • 剑指offer day9 动态规划(中等)
        • 剑指offer day10 动态规划(中等)
        • 剑指offer day11 双指针(简单)
        • 剑指offer day12 双指针(简单)
        • 剑指offer day13 双指针(简单)
        • 剑指offer day14 搜索与回溯算法(中等)
        • 剑指offer day15 搜索与回溯算法(中等)
        • 剑指offer day16 排序(简单)
        • 剑指offer day17 排序(中等)
      • 剑指 Offer 专项突击版
  • 前端进阶
    • React
      • 响应式系统与 React
      • React学习小记
      • Redux学习之Redux三原则、createSore原理及实现
    • Vue
    • TypeScript
      • TypeScript入门
      • TypeScript 类型体操练习
        • Easy题(13/13)
        • Middle(20/72)
    • 前端工程化
      • Webpack知识体系
    • Node
    • 前端动画与绘图
      • WebGL基础
      • 前端动画简介
      • Floating UI 使用经验分享 - Popover
      • Floating UI 使用经验分享 - Dialog
      • Three.js 学习
        • 学习记录
        • 资源记录
    • 前端性能优化
    • 跨端
      • RN 学习小记之使用 Expo 创建项目
    • 开源
    • SEO 优化
      • 搜索引擎优化 (SEO) 新手指南笔记
  • 笔面试记录
    • 面经集锦
      • 2022春暑期实习MetaApp一二面面经
      • 2022春暑期实习字节前端一面凉经
    • 笔试复盘
      • 2022春暑期实习-美团前端-笔试
      • 2022春暑期实习-360前端-笔试(AK)
      • 2022春暑期实习-京东前端-笔试
      • 2022春暑期实习-网易雷火前端-笔试(AK)
      • 2022春暑期实习-网易互联网前端-暑期实习笔试
由 GitBook 提供支持
在本页
  • 前端Debug的特点
  • Chorme devTools
  • 移动端 H5 调试
  • 常用开发调试技巧
  • 总结感想

这有帮助吗?

在GitHub上编辑
导出为 PDF
  1. 前端基础
  2. 通用知识

前端必须知道的开发调试知识

【第二届青训营-寒假前端场】- 「前端必须知道的开发调试知识」

上一页通用知识下一页前端设计模式应用

最后更新于3年前

这有帮助吗?

前端Debug的特点

多平台

浏览器、Hybrid、NodeJs、小程序、桌面应用……

多环境

本地开发环境、线上环境

多工具

Chrome devTools、Charles、Spy-Debugger、Whistle、vConsole……

多技巧

Console、BreakPoint、sourceMap、代理……

Chorme devTools

Chorme devTools谷歌浏览器自带的调试工具,功能非常之强大,包括现在很多浏览器也采用了这个调试工具,它既可以动态的添加/删除样式并实时的显示出来

image.png

强制状态显示

还可以筛选样式

截图

是的没错,可以对节点进行截图,非常的amazing啊(bushi

console

js中的console.log就会记录在这儿,不用多说了吧,想必都用过~

不过有一点需要提及的是,也可以输出带样式的文字方便调试时即时定位,如:

console.log('%s %o,%c%s', 'hello', {name:'我是姓名', age: 18}, 'font-size:20px; color:red; ', 'Welcome to bytedance!');

这里的%s是输出字符串,%o输出对象,%c输出样式(用过c/c++格式化输出的都晓得,不过这里的%c是样式嗷)

console.table可以具象化的展示一个对象数组,非常方便

const persons = [{id:1, name:'张三', age: 18, des: '好耶'},{id:2, name:'李四', age: 24, des: '我是李四'}, {id:3, name:'王五', age: 20, des: '这是什么'}];

树形结构dir

Soure Tab

顾名思义,展示源代码中的内容,可以增加断点、进行单步调试等。

在代码中某行执行 debugger 或打个断点就会在执行到这行的时候暂停,之后就可以继续单步调试了,之后的调试就不做过多介绍了,直接上手试试就能明白。(后端调试多了这个很容易习惯x相当于打了个断点)

压缩后的代码如何调试?SouceMap

前端代码天生具有“开源”属性,出于安全考虑,JavaScript代码通常会被webpack等工具进行压缩,而压缩后的代码通常只有一行,变量使用a、b等进行替换,整体变得不可阅读,那么压缩后的代码如何调试呢?

Perfomance

性能面板,可以生成报告,包括

NetWork

查看网络请求的面板,查看请求头/响应等等。

Application

该面板展示与本地存储相关的信息

  • Local Storage

  • Session Storage

  • IndexedDB

  • Web SQL

  • Cookie

小技巧:点击该面板下的Storage面板中的Clear Site Data就可以清除该网页的本地存储数据,无需打开浏览器设置进行清除。

移动端 H5 调试

真机调试

ios

  1. 使用Lightning 数据线将iPhone与Mac相连

  2. iPhone开启Web检查器(设置 -> Safari -> 高级 -> 开启Web检查器)

  3. iPhone使用Safari浏览器打开要调试的页面

  4. Mac打开 Safari浏览器调试(菜单栏 -> 开发 -> iPhone设备名 -> 选择调试页面)

  5. 在弹出的Safari Developer Tools中调试

没有iPhone设备可以在Mac AppStore安装Xcode使用其内置的ios模拟器

Android

  1. 使用USB数据线将手机与电脑相连

  2. 手机进入开发者模式。勾选USB调试。并允许调试

  3. 电脑打开Chrome浏览器,在地址栏输入: chrome://inspect/1devices并勾选Discover USB devices选项

  4. 手机允许远程调试,并访问调试页面

  5. 电脑点击inspect 按钮8622

  6. 进入调试界面

这种方法一般不推荐,直接使用手机扫码查看体验更佳

代理调试

之前使用手机利用fidder改代理抓包,现在也可以使用代理工具在手机上调试前端页面。原理如下:

  • 电脑作为代理服务器

  • 手机通过HTTP代理连接到电脑

  • 手机上的请求都经过代理服务器

改完代理就可以使用手机访问开发环境页面了!其他常用工具如下:

常用开发调试技巧

线上及时修改Override

  1. 打开Sources面板下的的Overrides

  2. 点击Select folders for Overrides。选择一个本地的空文件夹目录。

  3. 允许授权

  4. 在page中修改代码,修改完成后保存

  5. 打开devTools ,点击右上角的三个小点 -> More tools -> Changes,就能看到所有修改了

记录的非常直观,改完刷新也不会再消失了,还能查看修改了那些地方

利用代理解决开发阶段的跨域问题

启用本地source map

线上不存在Source Map时可以用Map Local网络映射功能来访问本地的Source Map文件

小黄鸭调试大法!

传说中程序大师随身携带一只小黄鸭,在调试代码的时候会在桌上放上这只小黄鸭,然后详细地向鸭子解释每行代码,然后很快就将问题定位修复了。

——《程序员修炼之道》

原来是出自这吗233333,这是梳理自己问题逻辑的一个好方法。

总结感想

前端开发的调试也是非常重要的一环,这节课非常详细的讲了PC端谷歌开发者工具的使用和移动端开发的调试,令人受益匪浅。

可以将一些特定状态下显示的元素显示出来(比如hover、active等)

也可以通过右侧的样式栏强制元素状态/添加伪类等等

image.png
image.png
image.png
image.png
image.png
image.png
image.png

其他还有当请求发生时打断点:XHR/fetch breakpoints、给元素结构添加断点(删除等)、scope可以查看作用域列表,(包括)、CallStack可以查看当前JavaScript代码的调用栈等。

webpack 打包时可以多产出一个程序,会将压缩后的代码和真实的文件进行),抛出异常时就将其映射出来,而在上线后将Source Map映射删除。

image.png
image.png
image.png
image.png

老师课堂上用的是Charles为例子,我就以之前手机上抓包为例了,亲测可行,详细步骤可以看这篇博客,需要安装证书才能抓取到HTTPS请求

image.png

浏览器本身有一个 ,不同源的请求会产生跨域问题,即协议、ip、端口号这三者有任何一个不同,就会产生跨域问题

本文引用的内容大部分来自秃头披风侠老师(?)的课、MDN以及一篇外部博客,

闭包
Source Map
映射
【fiddler】用fiddler实现android手机抓包_michaelwoshi的博客-CSDN博客_fiddler手机抓包
同源策略
【fiddler】用fiddler实现android手机抓包_michaelwoshi的博客-CSDN博客_fiddler手机抓包
image.png
image.png