前言
「前端Debug
的特点」
前端 Debug
具有多平台、多环境、多工具、多技巧的特点:

前端开发的平台不只是浏览器,还包括 Hybird
、NodeJs
、小程序、桌面应用等平台;
前端开发环境有本地开发环境和线上环境;
前端调试工具也多种多样:如 Chrome devTools
、vConsole
等;
前端的 Debug
技巧也有许多:如使用 console
语句,输出错误信息,结果等来 Debug
;或者利用 BreakPoint
断点来调试代码。
❝
由以上可知:前端 Debug 不知那么简单,我们需要掌握更多的
Debug
工具及技巧,帮助我们改善代码。❞
Chrome DevTools PC端调试工具
下面我们来介绍 Chrome DevTools
工具:
-
首先我们打开 Chrome DevTools
工具:启动Chrome
浏览器 -> 右键点击弹出菜单的「检查」选项:

这就是我们 Chrome DevTools
工具了,你可能看到的界面的语言为英语:我们可以通过点击右上角的设置图标,选择偏好设置,找到 languglge
选项更改为中文,重启浏览器即可。
下面我们来依次介绍导航栏选项所对应的功能,即元素(Elements)、控制台、源代码、网络、Performance insights
、性能、内存、应用、安全、Lighthouse
、图层、CSS概览。
元素(Elements)栏
❝
元素(Elements):
元素(Elements)栏,代表一个网页里边的元素和样式
可以动态修改元素和样式
❞
通过以下示例了解其作用:首先准备一个HTML 文件,通过浏览器打开,右击进入检查,选择元素栏。
<!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>示例</title>
<style>
.box{
width: 50px;
height: 50px;
}
.small{
width: 100px;
height: 100px;
}
.big{
width: 200px;
height: 200px;
}
.green{
background-color: green;
}
.red{
background-color: red;
}
.radius{
border-radius: 10px;
}
</style>
</head>
<body>
<div>
<div class="box small red"></div>
<div class="box big green"></div>
</div>
</body>
</html>

「操作」
-
我们可以选中对应的元素,查看其样式和盒子模型

-
点击元素可以修改元素的属性(class style 等)甚至替换元素:

或者通过右侧样式栏的 .cls
,为选中的元素,添加新类,或者移除已有类

如点击宽度值,改变元素的宽度

-
选中元素后,点击右侧栏计算样式(Computed)下点击样式里的箭头可以调转到 styles
面板中的css
规则。(当元素样式较多时,可以点击搜索对应的css样式)

-
如何调试伪类:
当我们 调试元素的 :hover
伪类时,由于鼠标离去和进入,伪类样式就会取消和生效,使我们无法调试伪类的样式,那么我们可以通过以下方式,强制伪类生效,进行调试。
选中具有伪类的元素,右击点击菜单中的强制执行状态->选中对应的伪类即可:

或者通过右侧样式栏的 :hov
,来强制设置伪类生效:

控制台(Console)栏
❝
控制台(Console):
控制台(Console)栏,可以用来代码中的日志,或执行js代码
❞

「日志级别」
输入以下代码,在控制台执行:
console.log('Hi'); //普通日志
console.warn('Hi'); //警告
console.error('Hi'); //错误
console.debug('Hi'); //debug
console.info('Hi'); //info
console.log('%s %o,%c%s','hello',{name:'tom',age:18},'font-size:24px; color: red', 'Hi My Friend')

占位符解释:
-
%s:字符串占位符 -
%o:对象占位符 -
%c:样式占位符 -
%d:数字占位符
「不同类型的数据输出的颜色不同」
console.log(111);
console.log('324');

「其他的日志」
console.table(); // 可以以表格形式展示数据
示例:
const goods = [
{name: 'apple', count: 300, price: 10.00},
{name: 'orange', count: 500, price: 20.00}
];
console.log(goods);
console.table(goods);

这样可以很方便看见数据的结构
console.dir(); //以文件树的形式,显示对象
示例:如我们打印 document.body
console.log(document.body);
console.dir(document.body);

使用 console.log()
方式,相当于拿到了整体的元素,使用console.dir()
,使我们可以获取属性。
源代码(Sources))栏
❝
源代码(Sources):
源代码(Sources))栏,可以用来展示项目的源代码,对代码进行断点调试
❞

区域1:页面资源文件目录树:相当于我们的项目目录
区域2:代码的预览区域
区域3: Debug工具栏,从左到右依次为
-
暂停(继续) -
单步跳过 -
进入函数 -
跳出函数 -
单步执行 -
激活(关闭)所有断点 -
代码执行异常处启动
区域4:断点调试器
「如何开始断点调试」
准备代码
<!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>示例</title>
<style>
.box{
width: 50px;
height: 50px;
}
.small{
width: 100px;
height: 100px;
}
.big{
width: 200px;
height: 200px;
}
.green{
background-color: green;
}
.red{
background-color: red;
}
.radius{
border-radius: 10px;
}
</style>
</head>
<body>
<div>
<div class="box small red" ></div>
<div class="box big green"></div>
</div>
<script>
//立即执行函数
(()=>{
debugger
console.log(1);
console.log(2);
console.log(4);
console.log(5);
console.log(6);
console.log(7);
})()
</script>
</body>
</html>
如何进入:
-
在想要暂停代码的地方,加上关键字 debugger
设置断点 -
或在预览区域的行号前进行点击,出现红点,即设置了断点

「Debug工具栏详解」

第一个暂停(开始)按钮:可以让我们在遇到bug时,暂停或继续执行代码
区域3: Debug工具栏,从左到右依次为
-
暂停(继续) 可以让我们在遇到bug时,暂停或继续执行代码 -
单步跳过 可以让我们一步步的执行 -
进入当前函数 当我们在一个函数里边执行代码时,如果代码步骤长,我们可以使用该按钮跳过该函数,进入上一层 -
跳出当前函数 当执行一个函数时,我们可以执行该函数,不必进入该函数内部(下层),从而执行(同层)代码 -
单步执行 -
激活(关闭)所有断点 -
代码执行异常处启动
「断点调试器详解」

-
监视(Watch):当我们执行代码的时候,可以显示当前执行代码处,变量的值
-
断点(Breakpoints):显示当前文件的所有断点
-
作用域和调用堆栈
-
XHR/提取断点:所有请求的断点
-
DOM 断点:当HTML中某一个元素发生变化时,可以添加断点
❝
压缩后的代码如何调试?
前端代码天生具有”开源“属性,出于安全考虑,上线之前JavaScript代码通常会被压缩(如webpack构建打包后),压缩后的代码只有一行,变量使用’a’,‘b’等替换,整体变得不可阅读。
❞

我们可以通过 soursemap
来进行调试:当项目上线后,某行代码报错,定位到错误位置,通过 soursemap
映射源码,进行处理。
问题:既然 soursemap
可以映射源码,那压缩后的代码不就不安全了,那么我们应该如何防范?
-
可以在项目打包时,打包出 soursemap
文件,将其上传到另一个服务器,不与主项目在一起,这样其他人就看不见源码了;我们可以通过一些监控系统来排错,由监控系统,结合soursemap
来比对源码中的错误。

网络(Network)栏
❝
网络(Network):
网络(Network)栏 我们可以看见该网站的所有请求,并查看接口的详细信息
❞
以掘金为例:
区域2:过滤面板
区域3:概览面板
区域4:请求列表面板
区域5:总结面板
区域6:请求详情面板
「控制面板常用功能」

-
红点:停止录制网络活动:就是有请求过来不在搜集 -
第二个清除按钮:可请求列表内容 -
已停用节流模式选项卡:可选用不同的网络,对应用进行测试
可以对请求过滤,显示指定的请求,如显示Fetch/XHR请求,JS、CSS静态资源等
「概览面板」

可以显示所有请求在每个事件段的分布情况
「请求列表面板」

显示所有请求的信息:如名称、状态、类型、响应时间等
「总结面板」
「请求详情面板」
应用 (Application)栏
❝
应用 (Application):
应用 (Application)栏 可以显示网站的存储、缓存、后台服务等信息
❞

「存储」
可以显示我们在
localStorage, SessionStorage Cookie
等信息

性能 (Performance)
❝
性能 (Performance)
可以对网站某一时间端进行性能分析
❞
如何进行分析:点击录制按钮,录制一段时间内的网站运行情况,点击结束,即可查看性能分析报告


「示例」

Linghthouse
❝
Linghthouse
网站性能分析:通过分析得到该网站相关能力的评分,以及优化意见
❞
原文始发于微信公众号(yanghi):前端必须知道的开发调试知识之Chrome DevToos
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/227010.html