gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

很多同學不知道為什么要用 debugger 來調(diào)試,console.log 不行么?還有,會用 debugger 了,還是有很多代碼看不懂,如何調(diào)試復雜源碼呢?這篇文章就來講一下這篇文章就來講一下為什么要用這些調(diào)試工具,希望對大家有所幫助!

console.log vs Debugger

相信絕大多數(shù)同學使用 console.log 調(diào)試的,把想看的變量值打印在控制臺。【相關(guān)教程推薦:nodejs視頻教程、編程教學】

這樣能滿足需求,但是遇到對象的打印就不行了。

比如我想看 webpack 源碼里的 compilation 對象的值,我打印了一下:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

但你會發(fā)現(xiàn)對象的值也是對象的時候不會展開,而是打印一個 [Object] [Array] 這種字符串。

更致命的是打印的太長會超過緩沖區(qū)的大小,terminal 里會顯示不全:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

而你用 debugger 來跑,在這里打個斷點來看就沒這些問題了:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

有的同學可能會說,那打印一個簡單的值的時候用 console.log 還是很方便呀。

比如這樣:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

真的么?

那還不如用 logpoint:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

代碼執(zhí)行到這里就會打印:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

而且沒有污染代碼,用 console.log 的話調(diào)試完之后這個 console 不也得刪掉么?

但是 logpoint 不用,它就是個斷點的設(shè)置,不在代碼里。

當然,最重要的是 Debugger 調(diào)試是可以看到調(diào)用棧和作用域的!

首先是調(diào)用棧,它就是代碼的執(zhí)行路線。

比如這個 App 的函數(shù)組件,你可以看到渲染這個函數(shù)組件會經(jīng)歷 workLoop、beginWork、renderWithHooks 這些流程:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

你可以點開調(diào)用棧的每一幀看下都執(zhí)行了啥邏輯,用到啥數(shù)據(jù)。比如可以看到這個函數(shù)組件的 fiber 節(jié)點:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

再就是作用域,點擊每一個棧幀就可以看到每個函數(shù)的作用域中的變量:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

用 Debugger 可以看到代碼的執(zhí)行路徑,每一步的作用域信息。而你用 console.log 呢?

只能看到那個變量值而已。

拿到的信息量的差距不是一點半點,調(diào)試時間長了,別人會對代碼的運行流程越來越清晰,而你用 console.log 呢?還是老樣子,因為你看不到代碼執(zhí)行路徑。

所以,不管是調(diào)試庫的源碼還是業(yè)務(wù)代碼,不管是調(diào)試 Node.js 還是網(wǎng)頁,都推薦用 Debugger 打斷點,別再用 console.log 了,就算想打印日志,也可以用 LogPoint。

而且在排查問題的時候,用 Debugger 的話可以加一個異常斷點,代碼跑到拋異常的地方就會斷住:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

可以看到調(diào)用棧來理清出錯前都走了哪些代碼,可以通過作用域來看到每一個變量的值。

有了這些東西,排查錯誤不就很輕松了么!

而你用 console.log 呢?

啥也沒,只能自己猜。

Performance

前面說 Debugger 調(diào)試可以看到一條代碼的執(zhí)行路徑,但是代碼的執(zhí)行路徑往往比較曲折。

比如那個 React 會對每個 fiber 節(jié)點做處理,每個節(jié)點都會調(diào)用 beginWork。處理完之后又會處理下一個節(jié)點,再次調(diào)用 beginWork:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

就像你走了一條小路,然后回到大路之后又走了另一條小路,用 Debugger 只能看到當前這條小路的執(zhí)行路徑,看不到其他小路的路徑:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

這時候就可以結(jié)合 Performance 工具了,用 Performance 工具看到代碼執(zhí)行的全貌,然后用 Debugger 來深入每一條代碼執(zhí)行路徑的細節(jié)。

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

SourceMap

sourcemap 很重要,因為我們執(zhí)行過的都是編譯打包后的代碼,基本是不可讀的,調(diào)試這種代碼也沒啥意義,而 sourcemap 就可以讓我們直接調(diào)試最初的源碼。

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

比如 vue,關(guān)聯(lián)了 sourcemap 之后,我們能直接調(diào)試 ts 源碼:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

nest.js 也是:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

不用 sourcemap 的話,想搞懂源碼,但你調(diào)試的是編譯后的代碼,怎么讀懂呢?

讀懂一行

前面說的 Debugger、Performance、SourceMap 只是調(diào)試代碼的工具,那會了調(diào)試工具,依然讀不懂代碼怎么辦呢?

我覺得這是不可能的。

為什么這么說呢?

就拿 react 源碼來說:

為什么要用debugger來調(diào)試代碼?這樣你能讀懂各種源碼!

switch case 能讀懂吧。三目運算符能讀懂吧。函數(shù)調(diào)用能讀懂吧。

每一行代碼都能讀懂,而全部的代碼不就是由這一行行代碼組成的么?

加上我們可以單步執(zhí)行來知道代碼執(zhí)行路徑。

為啥每行代碼都能讀懂,連起來就讀不懂了呢?

那應(yīng)該是代碼太多了,而你花的時間不夠而已。

先要讀懂一行,一個函數(shù),讀懂一個小功能的實現(xiàn)流程,慢慢積累,之后了解的越來越多之后,你能讀懂的代碼就會越多。

總結(jié)

這篇文章講了為什么要用調(diào)試工具,如何讀懂復雜代碼。

console.log 的弊端太多了,大對象打印不全,會超過 terminal 緩沖區(qū),對象屬性不能展開等等,不建議大家用。就算要打印也可以用 LogPoint。

用 Debugger 可以看到調(diào)用棧,也就是代碼的執(zhí)行路徑,每個棧幀的作用域,可以知道代碼從開始運行到現(xiàn)在都經(jīng)歷了什么,而 console.log 只能知道某個變量的值。

此外,報錯的時候也可以通過異常斷點來梳理代碼執(zhí)行路徑來排查報錯原因。

但 Debugger 只能看到一條執(zhí)行路徑,可以用 Performance 錄制代碼執(zhí)行的全流程,然后再結(jié)合 Debugger 來深入其中一條路徑的執(zhí)行細節(jié)。

此外,只有調(diào)試最初的源碼才有意義,不然調(diào)試編譯后的代碼會少很多信息。可以通過 SourceMap 來關(guān)聯(lián)到源碼,不管是 Vue、React 的源碼還是 Nest.js、Babel 等的源碼。

會了調(diào)試之后,就能調(diào)試各種代碼了,不存在看不懂的源碼,因為每一行代碼都是基礎(chǔ)的語法,都是能看懂的,如果看不懂,只可能是代碼太多了,你需要

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
www,av在线| 日韩精品在线视频免费观看| 国产97在线 | 亚洲| 国产亚洲精品久久久久久久| 精品日韩久久久| 免费欧美一级视频| www.亚洲天堂网| www黄色av| xxx国产在线观看| 亚洲一区二区在线视频观看| 日韩一区二区三区不卡视频| 午夜激情av在线| 伊人五月天婷婷| 国产又爽又黄ai换脸| 欧美xxxx吸乳| 六月丁香激情网| 韩国中文字幕av| 欧美一级黄色录像片| 久久99久久99精品| 白嫩少妇丰满一区二区| 男女啪啪网站视频| 亚洲精品国产久| 欧美精品久久久久久久自慰| 北条麻妃在线观看| 国产精品自在自线| 国产高清av在线播放| 九一精品在线观看| 一本色道久久88亚洲精品综合| 国产精品日韩三级| 亚洲精品无码久久久久久| 91看片在线免费观看| a级黄色片免费| 激情五月俺来也| 精品久久久无码人妻字幂| 日韩视频第二页| 今天免费高清在线观看国语| 国内外成人激情视频| 青青视频免费在线| 手机在线看福利| 青春草国产视频| 免费成人黄色大片| 国产午夜伦鲁鲁| 中文字幕日韩精品无码内射| 亚洲精品一二三四五区| 男人天堂a在线| 99亚洲精品视频| 国产一二三四在线视频| av免费看网址| 久久久久久久免费视频| 欧美日韩亚洲一二三| 日韩xxxx视频| 日本中文字幕在线不卡| 国产精品一区二区小说| 无码aⅴ精品一区二区三区浪潮| 国产探花在线观看视频| 日韩av片专区| 天天影视综合色| 日本成人中文字幕在线| 女人天堂av手机在线| 黄网站色视频免费观看| 91大神免费观看| 色一情一区二区三区| 亚洲成人av免费看| 欧美黄色性生活| 手机在线免费观看毛片| 欧美性猛交xxx乱久交| 色婷婷综合久久久久中文字幕 | 九九热免费在线观看| 能在线观看的av| 国产成人精品无码播放| 99久久国产宗和精品1上映| 免费黄色特级片| 色婷婷综合久久久久中文字幕| 欧美精品一区免费| 99色精品视频| 精品999在线| 污免费在线观看| 欧美一级特黄aaaaaa在线看片| 免费观看中文字幕| 日韩精品综合在线| 色综合av综合无码综合网站| 四季av一区二区| 国产精品无码乱伦| 国产免费黄色小视频| 欧美牲交a欧美牲交aⅴ免费真| 亚洲男人天堂色| 国内精品国产三级国产aⅴ久| 樱花草www在线| 黄页网站在线观看视频| 天天爱天天操天天干| 亚洲热在线视频| 国产成人在线免费看| 邪恶网站在线观看| 大桥未久一区二区三区| 18禁网站免费无遮挡无码中文| 茄子视频成人免费观看| 一区二区三区四区久久| 人人妻人人添人人爽欧美一区| 午夜视频你懂的| av免费看网址| 999在线精品视频| 欧美日韩黄色一级片| 日本高清久久久| 蜜桃传媒一区二区三区| 日本高清免费观看| 99久久激情视频| 男人添女荫道口女人有什么感觉| 18禁男女爽爽爽午夜网站免费| 99日在线视频| 日韩免费高清在线| 激情五月六月婷婷| 自拍一级黄色片| 99热这里只有精品在线播放| 国产人妻777人伦精品hd| 亚洲va在线va天堂va偷拍| av黄色在线网站| www.av蜜桃| 裸体裸乳免费看| 国产精品探花在线播放| 无人在线观看的免费高清视频| 黄黄视频在线观看| 在线播放 亚洲| 日本在线观看免费视频| 大j8黑人w巨大888a片| 久久久久久久久网| 国产精品h视频| 樱花草www在线| 亚洲午夜激情影院| 人人爽人人爽av| 亚洲视频一二三四| 不卡的av中文字幕| 日韩av手机版| 91极品视频在线观看| 日本超碰在线观看| 一区二区久久精品| 污污动漫在线观看| 91在线第一页| 欧美日韩一级在线| 日本男女交配视频| 可以看毛片的网址| 久久久免费视频网站| 午夜精品久久久内射近拍高清| 国产人妻777人伦精品hd| 免费看一级大黄情大片| 丝袜老师办公室里做好紧好爽| 北条麻妃69av| 亚洲福利精品视频| 亚洲女人在线观看| 久久久天堂国产精品| www精品久久| 久热免费在线观看| 亚洲欧美手机在线| 嫩草影院中文字幕| 韩国一区二区av| 亚洲欧美日本一区二区| 成年人深夜视频| 欧美激情国产精品日韩| www.午夜av| 少妇人妻无码专区视频| 国产免费999| 男人的天堂视频在线| 国产美女三级视频| 99视频在线观看视频| 精品无码一区二区三区在线| 精品久久久噜噜噜噜久久图片| 狠狠躁狠狠躁视频专区| 五月天综合婷婷| 国产日韩成人内射视频| 99亚洲精品视频| 北条麻妃在线视频| 欧美视频在线第一页| 91精品无人成人www| 91免费国产精品| 天天操天天干天天做| 鲁一鲁一鲁一鲁一色| 日韩video| 日本三级黄色网址| 欧美视频在线播放一区| 手机精品视频在线| 91热这里只有精品| www.av片| 亚洲精品天堂成人片av在线播放| 国模吧无码一区二区三区| 婷婷激情5月天| av五月天在线| 黄色动漫网站入口| 久久久久久免费看| 欧美一级特黄aaaaaa在线看片| 中文字幕在线观看第三页| 欧美一级视频免费看| 欧美在线观看黄| 欧美一级黄色录像片| 五月天激情播播| 在线观看免费不卡av| 日本a√在线观看| 日本va中文字幕| 91看片在线免费观看| 午夜dv内射一区二区| 天天影视综合色| 亚洲欧美在线精品|