8
写文章不容易,点个赞呗兄弟
专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧
研究基于 Vue版本 【2.5.17】

如果你觉得排版难看,请点击 下面链接 或者 拉到 下面关注公众号也可以吧

【Vue原理】学会调试Vue源码

调试是程序猿必备的技能,如果你不会调试,你的下场就是.........

v2-9d58cc334cc021d6d59e860d8e08f940_hd.jpg

嗯,一样可以拿高工资............

v2-36c4f44482da121427fb265c33870a69_hd.jpg

不过据我了解,连张鑫旭大佬都喜欢使用 console.log 调试,但是你以为别人不用,你就以为别人不会吗,你真的太天真了....

v2-ebf99b636ba83c66fe4cbc423f035b2b_hd.jpg

下面的评论也是...看来同是天涯沦落人

v2-a9d6ac098921d90819ae2aabc804d78d_hd.jpg

我在项目中也是使用 console.log 调试啊,但是阅读源码不一样啊,你试试一直用 console.log 调试,搞不死你

v2-cd85b6f4cbd597690994bc96b5caa78b_hd.jpg


好了,进入正题....

进入VSCode调试界面

是是是,让我们把眼睛移动到 VSCODE 左边活动栏 这边

1、有个小虫 v2-70caa0ca8b97310c1cf480288bf86b27_hd.jpg,点击进入调试界面

2、或者按快捷键, ctrl+shift+D

错!其实第一步你应该打开 VSCode


创建调试配置文件

点击这个小设置按钮

v2-d9841b20d442b89b8b6a691ba7ee5123_hd.jpg

之后,会弹窗,让你选择调试的类型,我们选择 Chrome ,骚年

v2-71b856abb922bb5db34cf8f2c5d68257_hd.jpg

Duang 的一声,你会发现自动生成了一个配置文件

v2-e6ec95a5e07dccd642692b03d0c24355_hd.jpg

然后这一步你就成功了呗....到下一步了


配置调试配置文件

配置文件有很多选项,我只给出最简单的可以使用的版本

{    
    "version": "0.2.0",    
    "configurations": [
        {            
            "type": "chrome",            
            "request": "launch",            
            "name": "调试 Vue 的调用走向",            
            "file": "${workspaceRoot}/index.html",
        }
    ]
}

解释一下 ( • ̀ω•́ )✧

type

是你调试类型,你调试的是网页,还是调试 node。

现在我们调试网页,所以选择 Chrome

name

调试名称,随你起名字,起 个 xxxxxx

file

本地文件路径,调试 本地 文件( workspaceRoot 是项目根目录,以此来确定你的 html 调试页面 相对路径)


开始调试

打断点

在 文件的 序号一栏 的左边,可以标记红色断点

然后可以在序号栏 左边,看到你打的所有断点

v2-a1cb22294562ef1778c4dad1b4c9d175_hd.jpg

启动调试

点击下面的按钮,立即启动调试,等个几秒钟??

v2-d8bc43f3ee1fc74d0e74e0a9dbb1d917_hd.jpg

启动成功

然后你发现 谷歌浏览器被自动启动了,然后你就成功了兄弟

看得到 浏览器 的 url 是你的 硬盘绝对路径,也就是你在配置文件里面配置的

v2-21264cb29e64538dd877f25e18f01d15_hd.jpg

TIP:如果你启动调试期间出现什么问题,不要怕,度娘 或者 谷哥,资料很多,我也碰到很多问题,很正常

(~ ̄▽ ̄)~


调试工具栏

启动调试成功之后,你可以看到 这个工具栏的出现

v2-61e413878e32a2ea283a39491dff827a_hd.jpg

我们来一个个看 每个按钮都是什么作用

v2-91427e25e60d3e0c67446f9c686e66ee_hd.jpg
继续,跳断点,从一个断点 跳到 另一个断点

v2-4f29bc60202b6f81a8e81fffb200da0f_hd.jpg

单步跳过

跳过函数执行,就是 不进入函数内部,直接执行完函数,跳到函数下一个语句

TIP:但是如果你在这个函数的内部 打了断点,点击【单步跳过】你还是会进入函数内部,然后跳到函数内部最近那个断点那行

ヾ(●´∀`●)

v2-4de5ca80f88aeaea3a05854b16f204eb_hd.jpg

单步跳出

跳出 单签函数体,如果当前调试已经进入了某个函数,那么立即执行完当前函数,并跳出这个函数

TIP:但是如果你在这个函数的内部 打了断点,你可能跳不出去,而是跳到这个函数 内部最近的一个断点

v2-f81c9b2e8153654874bbfaafa3a8621a_hd.jpg

重启,重新启动调试,从头开始

v2-7af1f4a5722a0d376dee68ffce485674_hd.jpg

停止,关闭调试


**

举栗子 (´・ᴗ・`)

**

准备好文件

index.html,越短越好

<script src="./index.js"></script>

index.js

function fn1(name){    
var result = name+" fn1 处理过 "
    fn2(result)
}
function fn2(arg){    
return arg +" fn2 处理过 "
}
fn1("hoho")

01 新建调试文件 launch.json

{    
       "version": "0.2.0",    
       "configurations": [
        {            
           "type": "chrome",            
           "request": "launch",            
           "name": "调试Demo",            
           "file": "${workspaceRoot}/index.html",
        }
    ]
}

02 打断点

v2-a870fb3d8043fce1621bbd3fb6aeba7e_hd.jpg

03 启动调试,来到第一个断点

v2-fa7c2827c92d5174d11eb9a3662b0d19_hd.jpg

04 开始调试

先讲按钮使用流程

现在执行到 fn1 函数这一行,但是 fn1 还没执行

此时点击 v2-c9bc969b48f84290e9128fe3262110b4_hd.jpg

执行 fn1,进入 fn1 函数内部

进入 fn1 之后

一直点击 v2-c9bc969b48f84290e9128fe3262110b4_hd.jpg,直到执行到 fn2 语句

像下面这样,有条黄线,就表示执行到哪条语句

v2-7768d9bc370dbc59bcbb6081c3025e69_hd.jpg

1、点击 v2-93af1f8a2aad27a38afc1bea2cba09d8_hd.jpg,会 立即执行完 fn2 ,不进入 fn2

2、点击

v2-d84f2727ca8a605c74b8838f28ed6ec7_hd.jpg

,会 进入 fn2

如果进入了 fn2 之后

点击 v2-4de5ca80f88aeaea3a05854b16f204eb_hd.jpg

,会立即执行完 fn2 函数,跳出 fn2 函数内部

现在,我们

v2-4de5ca80f88aeaea3a05854b16f204eb_hd.jpg

v2-d84f2727ca8a605c74b8838f28ed6ec7_hd.jpg

v2-93af1f8a2aad27a38afc1bea2cba09d8_hd.jpg

三个按钮都使用过了,还剩

v2-259c30991a492288c4d81b73d5221e91_hd.jpg

我们在 fn2 处打多一个一个断点,然后重启

v2-f81c9b2e8153654874bbfaafa3a8621a_hd.jpg

你能看到 现在又是停到了 第一个断点处

v2-fa7c2827c92d5174d11eb9a3662b0d19_hd.jpg

此时,你的小手一按
v2-259c30991a492288c4d81b73d5221e91_hd.jpg

,于是你便跳到了刚打的第二个断点

v2-dcc786d085eadee39f22b19e62c10672_hd.jpg

观察变量值

1、可以把鼠标移动到 某个变量上,会显示一个弹窗,弹窗内容是 变量的值

v2-b9087e54adb6e829b799ece047a69716_hd.jpg

2、或者可以查看 左栏 调试栏的 变量

v2-7bcae0e8ea44dc10130788aba8156a6b_hd.jpg

观察函数调用流程

同样是查看左边的 调试栏,中的调用堆栈,可以看到 函数调用的顺序

明显可以看到 先调用 fn1, 在调用 fn2

v2-fd26b2b48a18a9bc7243b057abfd640c_hd.jpg

好的,如果你 有跟着做的,相信你已经入门了兄弟,是不是十分钟从入门到精通??

v2-e507f1c82ec0e3136dceb3b9aba76b1b_hd.jpg


调试Vue准备

index.html

引用 vue 文件、引用 vue.test.js 文件

<!DOCTYPE html>
<html lang="en"><head></head><body>
    <div class="a" >
        <testb></testb>
    </div>
    <script src="./vue.js"></script>
    <script src="./vue.test.js"></script>
</body>
</html>

vue.js

去官网下载生产版本即可

vue.test.js

作用是调用vue,创建一个简单的应用,现在给一个简单的模板

new Vue({    
    el:".a",
    data(){        
        return {            
            name:1
        }
    },    
    methods:{
        getName(){            
            this.name="修改----我是父组件a"
        },
    },
})

现在,你可以尽情去 vue 里面去打断点啦,额..... 虽然现在你还不知道打什么断点,不过不用怕!后面每次讲一块内容,你就可以去自己尝试啦

v2-cd85b6f4cbd597690994bc96b5caa78b_hd.jpg


结尾

好的,本次讲解完毕,调试就是这么简单,真的没有什么难的,

最后有什么不对的地方,感谢指出

希望本文会对你有帮助

好的,谢幕了

v2-b5b7d1e5889a1ab479f46caf52a28d8e_b.jpg


神仙朱
235 声望105 粉丝

不会认输