前端调试知识
BUG与Debug
第一个BUG的产生
第一个BUG可以追溯到1945年的9月
1945年9月9日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。这还不是一个真正的电子计算机,它使用了大量的继电器,一种电子机械装置。第二次世界大战还没有结束。哈珀的小组日以继夜地工作。机房是一间第一次世界大战时建造的老建筑。那是一个炎热的夏天,房间没有空调,所有窗户都敞开散热。
突然,马克二型死机了。技术人员试了很多办法,最后定位到第70号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例”。
从此以后,人们将计算机错误称为Bug,与之相对应,人们将发现Bug并加以纠正的过程叫做“Debug”,意即“捉虫子”或“杀虫子”.
BUG是无法避免的
前端Debug的特点
1.多平台
2.多环境
3.多工具
4.多技巧
chrome DevTools
动态修改元素和样式
Elments
面板用于调试元素与样式
可以实时修改标签和样式
在Computed
中可以看到最终生效的样式,以及其对应的CSS文件来源
-
点击
.cls
开启动态修改元素的class
-
输入字符串可以动态地给元素添加类名
-
勾选/取消类名可以动态地查看类名生效效果
-
点击具体的样式值(字号,颜色,宽度高度等)可以进行编辑,浏览器内容区域实时预览
-
Computed下点击样式里的箭头可以跳转到
style
面板中的css
规则可以使用以下两种方式强制激活伪类
- 选择具有伪类的元素,点击
:hov
- DOM树右键菜单,选择
Force State
- 选择具有伪类的元素,点击
Console日志面板
console.log
console.warn
console.error
console.debug
console.info
左侧可以选择等级,对日志进行分类查看
console.table
具象化地展示JSON和数组数据
-
console.dir
可以展示对象中的属性和对应的值let juejin = document.getElementById('juejin'); undefined console.dir(juejin); 复制代码
-
占位符
给日志添加样式,可以突出重要的信息
%s:字符占位符;%o:对象占位符;%c:样式占位符;%d;数字占位符举例
console.log('%s %o,%c%s','hello',{name:'张三', age: 20}, 'font-size: 24px; color: red', 'hello world!') 复制代码
Source Tab
Break Point
与 Watch
page
对应着网站的目录资源,每个页面都有对应的代码
中间是选择的文件的相关代码
右边是调试界面
在js
文件对应位置加上debugger
,程序执行到对应位置便进入调试
也可以直接在中间代码区域直接点击行号来添加断点
调试界面
watch
可以对某一个变量的监听
Breakpoints
查看对应的断点
Scope
与Call Stack
Scope
作用域
Call Stack
调用栈
压缩后的代码如何调试
前端代码天生具有”开源”属性,处于安全考虑,JavaScript
代码通常会被压缩,压缩后的代码只有一行,变量使用a,b等替换,整体变得不可阅读.
那么压缩后的代码如何调试呢?
source map
打包时生成source map
文件,但是不会上传到线上,
Performance
和性能相关的面板
区域1:控制面板
区域2:概览面板
- FPS:每秒帧数
- CPU:处理各个任务花费的时间
- NET:各个请求花费的时间
区域3:线程面板
Frames
:帧线程Main
:主线程,负责执行JavaScript
,解析HTML/CSS
,完成绘制Raster
:Raster
线程,负责完成某个layer
或者某些块的绘制.
区域4:统计面板
network
网站网络请求情况
Application
该面板主要是记录网站加载的所有资源信息,包括存储数据(Local Storage、Session Storage、IndexedDB、Web SQL、Cookies)、缓存数据、字体、图片、脚本、样式表等
使用调试工具快速截长图
移动端H5调试
真机调试
直接用数据线连接设备
使用代理工具调试
常用工具
Charles
Progress
Whistle