成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

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

為什么要用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號
动漫RH男男车车好快的车车| 被带到调教室刑床惩罚挠痒痒作文| 丝袜国偷自产中文字幕| 国产99久久久国产精品成人小说 | 久久国产精品99国产精| 国产高清不卡一区二区| 被揉到高潮揉出水视频| 18禁白丝JK自慰喷水无码| 亚洲人精品午夜射精日韩| 掀开老师的裙子挺进去| 色欲AV无码一区二区人妻| 欧洲一卡2卡3卡4卡乱码视频| 老师你的兔子好软水好多的图片| 精品国产18久久久久久| 国内精品久久久久久久影视麻豆| 国产精品无码一区二区三区电影 | 诱人的老师HD中字| 亚洲午夜精品久久久久久APP| 小SB是不是想被C了| 天天天狠天天碰天天爱 | 成熟人妻换╳╳╳╳| А√天堂8资源最新版| AV天堂午夜精品一区| [中文] [3D全彩H漫]新来| 在线中文天堂最新版WWW| 亚洲综合网站精品一区二区| 亚洲日韩激情无码一区| 97在线无码免费人妻短视频| 92午夜少妇极品福利无码电影| 18国产精品白浆在线观看免费| 成人无码区免费AⅤ片黄瓜视频| 被猛男房东CAO到哭H| 国产男男Gay做受ⅩXX高潮| 国产欧美强奸激情| 国产又粗又湿又刺激18禁 | 成人片在线观看地址KK4444| 国模少妇无码一区二区三区| 妺妺窝人体色WWW在线小说| 妺妺窝人体色聚窝窝www毛片| 上面一个摸下面一个手念什么| 十八禁乳露裸体奶头WWW网站 | 亚洲国产精品成人午夜在线观看| 亚洲AV午夜成人片精品| 亚洲乱色熟女一区二区三区麻豆| 亚洲人成电影网站色MP4| 夜夜添无码试看一区二区三区| 月光影视WWW在线观看| 18禁黄污无遮挡无码网站| 国产成人精品一区二三区在线观看| 国产精品内射后入合集| 乱色精品无码一区二区国产盗| 门卫老头吮她的花蒂| 欧洲美女粗暴交视频| 亚洲AV日韩AV无码AV| 亚洲色婷婷综合开心网| 中文字幕亚洲乱码熟女1区2区| 696969大但人文艺术来源| 爸的比老公大两倍儿媳妇怎么称呼| 公和熄小婷乱中文字幕| 国产做出在线 | 传媒麻豆| 欧美XXXX做受欧美88BBW| 日韩精品无码免费专区午夜不卡| 调教小奴高潮惩罚PLAY道具| 亚洲AV中文无码乱人伦在线R| 伊伊人成亚洲综合人网7777| Xx性欧美肥妇精品久久久久久久久 | 久久精品亚洲一区二区三区浴池| 老熟妇BBWASS| 羞羞漫画AⅤ漫画AV漫画视频| 亚洲欧美一区二区三区| 丰满熟妇人妻AV无码区| 好爽…又高潮了毛片免费看| 久久亚洲中文不卡AV一区二区| 强CAO出水嗯啊高潮了H漫画| 亚洲精品性爱av| AV在线中文字幕不卡电影网| 精品国产YW在线观看| 色一情一乱一伦一视频免费看 | 色婷婷综合久久久中文字幕| 性XXXX欧美老妇胖老太性多毛| CHINESE性老妇老女人| 国产精品久久毛片| 久久婷婷五月综合色俺也想去| 欧美日韩国产免费一区二区三区| 少妇厨房愉情理伦BD在线观看| 中国丰满人妻VIDEOSHD| 狠狠躁天天躁日日躁欧美| 农村妇女野外交性高清片| 四虎永久在线精品视频| 亚洲人妻AV伦理| 国产毛片一二区三区四区| 日本人妻JAPANESEXXX| 亚洲AV午夜福利精品一区人妖| 大胆GOGO高清在线观看| 精品国产亚洲AV麻豆映画| 天堂VA在线高清一区| ているの天堂资源WWW| 免费播放片高清在线视频| 太多了太满了肚子装不下了| JIZZ在线观看中国少妇| 国语对白做受XXXXX在线中国| 嫩草欧美曰韩国产大片| 亚洲中文无码永久免| 丰满少妇AV无码区| 欧美一区视频在线| 亚洲成人Av在线| jlzzjlzz全部女高潮| 乱子伦熟睡亚洲1区| 亚洲精品综合欧美一区二区三区 | 免费无码AV片流白浆在线观看| 色先锋AV资源中文字幕| 锕锕锕锕锕锕好污网站入口推特| 男男GAy作爱免费观看| 伊人成年网站综合网| 久久99国产精品二区| 色婷婷成人AV电影| 波多野结衣加勒比东京热| 欧美交换配乱婬粗大| 亚洲成在人线AV中文字幕喷水| 国产精品免费久久久久影院仙踪林| 色欲色欲天天天WWW亚洲伊| 插我一区二区在线观看| 久久久久久久久毛片精品| 特黄熟妇丰满人妻无码| 丰满老师引诱我进她身体| 人摸人人人澡人人超碰| 亚洲日韩国产一区二区三区| 精品欧美H无遮挡在线看中文 | 免费观看羞羞的事情网站| 曰本丰满成熟xxxx精品| 老女人性饥渴XXXXⅩHD| 找老女人泻火对白自拍| 蜜臀av夜夜嗨一区二区粉嫩| 2021最新国产在线人成| 欧美成人V片观看| SM调教贱屁股眼哭叫求饶H| 强奷高H猛烈失禁潮喷播放| ているの天堂资源WWW| 日本精产国品一二三产品| 大豆期货交易价格| 同学要做吗PO爱喝花茶的小酥肉 | 亚洲成AV人片一区二区三区| 精品亚洲国产成AV人片传媒| 野花影视在线观看免费高清完整版| 久欠精品国国产99国产精2| 亚洲AV片不卡无码一| 黑人顶到深处高潮颤抖| 亚洲精品卡2卡3卡4卡5卡区| 久久久久人妻精品一区二区三区| 无遮挡无码H纯肉动漫在线观看| 草莓丝瓜榴莲绿巨人WWW| 色综合久久婷婷88| 国产精品一国产AV麻豆| 色婷婷亚洲六月婷婷中文字幕| 国产FREEXXXX性播放麻豆| 人妻少妇乱孑伦无码专区蜜柚 | 欧美一区二区三区啪啪| 波多野结衣一区二区三区高清 | 日本大学生处毛茸茸| 国产成人AⅤ片在线观看免费| 五月丁香综合激情六月久久| 精品国产乱码久久久久久蜜桃免费| 伊人久久大香线蕉午夜AV| 欧美人妻少妇精品久久黑人| 中国A级毛片免费| 欧美性大战XXXXX久久久√| 俄罗斯卖CSGO的网站免费进入| 无码热综合无码色综合| 国产AV一区二区三区最新精品 | H无码动漫在线观看网站| 免费A级毛片无码A∨蜜芽18禁| WWW久久只有这里有精品| 天堂中文资源在线最新版下载| 护士HD老师FREE性ⅩⅩⅩⅩ| 亚洲AV区无码字幕中文色| 久久久久精品老熟女国产精品| BRAZZERSHD欧美巨大| 婷深夜综合成人AⅤ网站| 精品无码久久久久久国产| 亚洲人成人一区二区三区| 母与子之间的阴阳调和| 敌伦交换第11部分给了| 亚洲AV永久无码精品无码一区二区| 麻豆我精产国品一二三产区区别| 孕妇泬出白浆18P| 日韩A人毛片精品无人区乱码| 国产精品无码久久AV不卡| 荫蒂添的好舒服小说短篇| 日韩乱妇乱女熟妇熟女AV| 大象一区一品精区搬运机器| 亚洲AV无码一区二区三区乱码4 | 成人片黄网站色大片免费| 亚洲AV无码国产精品麻豆天美| 韩漫漫画登录页面入口弹窗秋蝉张| 在线亚洲熟妇一区二区三| 少妇久久久被弄到高潮| 久久久精品国产SM最大网站| 成年AV免费网址大全超清| 亚洲乱色熟女一区二区三区丝袜 | 好儿子妈妈今天就是你的女人|