github项目地址javascript
解决bug一般要对代码进行调试,这样才能比较容易的找出关键性问题。掌握一个好的调试技巧是一个开发人员必备的基本技能。html
这里咱们拿一套iview-admin 的源码来进行调试前端
所谓肉眼调试就是指直接看代码进行调试,这种方式效率很是低下。vue
log(...)java
查看console.log(...)打印出的日志应该是目前大多数前端惯用的调试方法。可是这种方式对于缕清程序运行的步骤和过程来讲是比较困难的。node
好比,我要查看一个函数被调用的位置,这就比较难找出。查看下面代码webpack
咱们须要找到 updateMenulist() 被调用了几回,在哪被调用的。固然,被调用了几回咱们很容易查看,只须要在函数内打印一下便可。git
updateMenulist (state) {
console.log("我被调用了")
}
复制代码
浏览器控制台中就会显示出来github
可是咱们想知道它是在哪里被调用的,这时咱们会想到,直接在文件夹里搜索这个函数不就能够了吗,如web
搜索到的结果是有4个地方调用了这个函数,可是控制台里只打印了两次,那么,继续往下看。
trace(...)
这个console.trace()的概述是:向Web控制台输出一个堆栈跟踪。意思就是打印当前执行位置到console.trace()的路径信息.使用console.trace()能够打印出详细的调用堆栈:
若是是使用webpack打包了须要将打开map模式,不然断点断不到具体文件。
浏览器中断点
以前咱们console.log()打印的时候,后面会出现打印的具体文件位置。
点击以后会跳到这个文件的具体位置。以后点击我箭头所指的位置就断点了
以后就能够按F5刷新断点调试了,程序运行到这个地方会被卡住,而后你就能够查看当前的环境中的一些信息,以下
查看调用栈
咱们能够很明显的查看函数第一次是在main.js的34行调用的。
而后咱们能够按下F11或者:
因而咱们再次点击,就又跳到了第二次执行这个函数的地方。
代码中的断点
有时候咱们不想用console.log()去打印而后在浏览器中找到文件设置断点,那还有一种方法能够快速的实现断点
使用 debugger 关键之
在代码中直接使用 debugger 关键字能够快速的实现断点。
效果和浏览器中的断点效果是同样的。
使用vscode的朋友们能够很方便的在vscode上面进行调试
配置launch.json
在项目根目录配置.vscode文件夹。下有个launch.json文件
文件内容
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "启动程序",
"program": "${workspaceFolder}/HT/javascript/test.js"
}
]
}
复制代码
点击F5或者:
关于vscode 调试的 查阅 go.microsoft.com/fwlink/?lin… 通常是进行服务端后台开发的用vscode调试的比较多。
首先,下载vscode 插件
而后点击调试按钮
找到你的项目添加配置
如个人是MyApp,点击添加
而后会跳到一个文件里
将url改为你的项目开发环境调试的地址, 而后 驱动项目 通常的启动命令配置都是 npm run dev,具体的启动命令自行查看package.json文件中。
启动完成以后 按f5启动 chorme调试,这样就能够在 vscode 中打断点进行调试了。
vue devTools 使用chrome内核的浏览器能够下载vue devTools拓展来调试vue单页应用,这使得vue项目调试起来很是的方面。
如我写的一个后台管理的vue页面。启动项目后。
而后按f12打开开发者工具,找到咱们工具栏中的vue选项。因而乎便能清晰的看到咱们的vue组件。
当有事件被触发的时候,事件监听器会断点到具体的事件位置。
例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="cli">测试点击</div>
</body>
<script> var cli = document.querySelector("#cli"); cli.addEventListener("click", function(){ console.log("点击了") }) </script>
</html>
复制代码
在浏览器中打开文件,而后按f12找到sources选项卡,好比我要监听点击事件。选择mouse将click打上钩。
而后咱们测试点击事件。即可以发现事件被拦截了。
此处我举个node removal的例子
当咱们点击测试点击的时候,会将一个DOM给删除。因而会在删除的代码中实现断点
注:此小结从别人文章中摘要。
这几年前端开发发生了翻天覆地的变化,从当初的名不见经传到现在的盛极一时,Ajax驱动Web富应用,移动WebApp单页应用风生水起。这一切都离不开XMLHttpRequest对象,而“XHR Breakpoints”正是专为异步而生的断点调试功能。
咱们能够经过“XHR Breakpoints”右侧的“+”号为异步断点添加断点条件,当异步请求触发时的URL知足此条件,JS逻辑则会自动产生断点。演示动画中并无演示到断点位置,这是由于,演示使用的是jQuery封装好的ajax方法,代码已通过压缩,看不到什么效果,而事实上XHR断点的产生位置是”xhr.send()”语句。
XHR断点的强大之处是能够自定义断点规则,这就意味着咱们能够针对某一批、某一个,乃至全部异步请求进行断点设置,很是强大。可是,彷佛这个功能在平常开发中用得并很少,至少我用得很少。想一想缘由大概有两点:其一,这类型的断点调试需求在平常业务中自己涉及很少;其二,现阶段的前端开发大多基于JS框架进行,最基本的jQuery也已经对Ajax进行了良好封装,极少有人本身封装Ajax方法,而项目为了减小代码体积,一般选择压缩后的代码库,使得XHR断点跟踪相对不那么容易了。
使用Chrome DevTools的performance面板能够记录和分析页面在运行时的全部活动。
在火焰图上看到的圈起来的三条虚线,分别是: