久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

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

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

console.log vs Debugger

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

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

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

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

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

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

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

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

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

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

比如這樣:

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

真的么?

那還不如用 logpoint:

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

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

代碼執行到這里就會打印:

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

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

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

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

首先是調用棧,它就是代碼的執行路線。

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

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

你可以點開調用棧的每一幀看下都執行了啥邏輯,用到啥數據。比如可以看到這個函數組件的 fiber 節點:

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

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

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

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

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

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

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

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

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

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

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

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

而你用 console.log 呢?

啥也沒,只能自己猜。

Performance

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

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

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

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

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

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

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

SourceMap

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

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

比如 vue,關聯了 sourcemap 之后,我們能直接調試 ts 源碼:

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

nest.js 也是:

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

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

讀懂一行

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

我覺得這是不可能的。

為什么這么說呢?

就拿 react 源碼來說:

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

switch case 能讀懂吧。三目運算符能讀懂吧。函數調用能讀懂吧。

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

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

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

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

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

總結

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

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

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

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

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

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

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

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
欧美一区二区性| 在线综合视频| 亚洲欧洲专区| 香蕉久久久久久| 激情不卡一区二区三区视频在线| 国产探花在线精品一区二区| 日韩激情网站| 美女性感视频久久| 久久久久久网| 婷婷成人在线| 日韩精品一二三| 久久国产三级精品| 久久亚洲黄色| 亚洲成av在线| 亚洲一区免费| 91成人在线网站| 久久国产精品免费一区二区三区 | 亚洲欧美专区| 免费视频一区二区三区在线观看| 国产成人77亚洲精品www| 久久久精品网| 婷婷综合一区| 午夜久久中文| 日韩在线一二三区| 欧美极品一区二区三区| 中文字幕系列一区| 日本在线不卡视频| 久久青青视频| 在线一区视频| 加勒比视频一区| 亚洲欧美日韩国产一区| 久久亚洲精精品中文字幕| 欧美精品羞羞答答| 日产欧产美韩系列久久99| 福利视频一区| 一区二区三区网站| 日韩精品诱惑一区?区三区| 亚洲综合图色| 久久狠狠婷婷| 国产精品igao视频网网址不卡日韩 | 国产成人精品免费视| 激情综合网站| 精品国产一区二区三区性色av| 在线一区电影| 久久一区精品| 亚洲毛片网站| 亚洲福利久久| 麻豆91精品视频| 午夜a一级毛片亚洲欧洲| 久久精品青草| 国产中文欧美日韩在线| 亚洲精品第一| 婷婷丁香综合| 色欧美自拍视频| 欧美日韩一区二区三区四区在线观看| 色天使综合视频| 国产精品15p| 亚洲日本免费电影| 欧美二区视频| 中文字幕在线高清| 欧美日韩在线精品一区二区三区激情综合 | 韩日一区二区三区| 老牛国内精品亚洲成av人片| 亚洲欧洲日韩精品在线| 欧美综合另类| 综合日韩av| 麻豆视频久久| 国产精品高清一区二区| 麻豆亚洲精品| 久久精品国产亚洲夜色av网站| 精品高清久久| 久久99国产精品视频| 欧美日韩伊人| 日韩精品久久理论片| 亚洲欧美不卡| 亚洲精品888| 久久久久国产一区二区| 亚洲天堂av影院| 91偷拍一区二区三区精品| 美女久久久久久 | 亚洲综合福利| 亚洲视频电影在线| 欧美日韩国产免费观看| 亚洲精品.com| 久久久久免费av| 国产亚洲一区二区手机在线观看| 成人在线超碰| 91亚洲成人| 欧美一级鲁丝片| 精品日韩视频| 久久伦理在线| 欧美日韩在线观看视频小说| 婷婷成人在线| 亚洲专区在线| 视频在线观看一区二区三区| 国产视频欧美| 99国产精品私拍| 欧美理论视频| 国产亚洲综合精品| 免费人成黄页网站在线一区二区| 午夜亚洲一区| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲va久久| 91综合久久爱com| 国产精品黄网站| 高清一区二区| 欧美一区三区| 蜜臀久久99精品久久久久久9| 中文在线日韩| 国产乱人伦丫前精品视频| 久久精品99国产精品| 国内精品美女在线观看| 久久精品资源| 欧美羞羞视频| 亚洲一区欧美二区| 青青草国产精品亚洲专区无| 久久影视三级福利片| 高清av一区二区三区| 蜜臀av一区二区在线免费观看 | 五月婷婷亚洲| 婷婷成人av| 久久精品资源| 亚洲高清激情| 午夜性色一区二区三区免费视频| 欧美一级二级视频| 国产成人免费| 麻豆9191精品国产| 久久wwww| 2023国产精品久久久精品双| 日韩激情综合| 亚洲日本网址| 中文不卡在线| 国产精品麻豆久久| 首页欧美精品中文字幕| 久久av偷拍| 欧美日韩中文字幕一区二区三区 | 日韩在线成人| 亚洲国产福利| 亚洲美洲欧洲综合国产一区| 国产精品一区二区精品| 999国产精品| 日韩精品五月天| 99精品电影| 国产精品一区二区三区四区在线观看| 久久影视一区| 久久精品国产精品亚洲毛片| 水野朝阳av一区二区三区| 精品91福利视频| 中文字幕一区二区精品区| av中文资源在线资源免费观看| 宅男噜噜噜66国产日韩在线观看| 国产精品亲子伦av一区二区三区 | 夜夜嗨网站十八久久| 麻豆国产欧美一区二区三区| 黄页网站一区| 国际精品欧美精品| 亚洲一二三区视频| 亚洲天堂一区二区| 国产精品一区二区中文字幕| 免费视频久久| 久久久久国产精品一区二区| 久久av导航| 中文字幕视频精品一区二区三区| a国产在线视频| 国产精品一区二区中文字幕| 亚洲欧美网站| 91精品一区国产高清在线gif| 国产精品视频一区二区三区四蜜臂| 欧美精品一区二区三区精品| 精品国产精品久久一区免费式| 亚洲精品少妇| 黄色成人精品网站| 激情黄产视频在线免费观看| 久久精品 人人爱| 日av在线不卡| 精品一区亚洲| 日韩av在线播放网址| 青青国产精品| 国产一级久久| 免费精品国产| 999国产精品| 亚洲黄色网址| 国产一区二区三区黄网站| 国产一区 二区| 日韩在线网址| 一区二区91| 久久国产精品亚洲77777| 欧美69视频| 日韩av免费| 欧美日韩尤物久久| 日韩精品永久网址| 国语精品一区| 精品三级在线| 欧美激情91| 麻豆精品在线| 精品一区二区三区亚洲| 国产精品亚洲产品| 欧美日本久久| 国产精品xvideos88| 国产精品久久久久av蜜臀|