
很多同學不知道為什么要用 debugger 來除錯,console.log 不行么?
還有,會用 debugger 了,還是有很多代碼看不懂,如何除錯復雜原始碼呢?
這篇文章就來講一下為什么要用這些除錯工具:
console.log vs Debugger
相信絕大多數同學使用 console.log 除錯的,把想看的變數值列印在控制臺,
這樣能滿足需求,但是遇到物件的列印就不行了,
比如我想看 webpack 原始碼里的 compilation 物件的值,我列印了一下:

但你會發現物件的值也是物件的時候不會展開,而是列印一個 [Object] [Array] 這種字串,
更致命的是列印的太長會超過緩沖區的大小,terminal 里會顯示不全:

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

有的同學可能會說,那列印一個簡單的值的時候用 console.log 還是很方便呀,
比如這樣:

真的么?
那還不如用 logpoint:


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

而且沒有污染代碼,用 console.log 的話除錯完之后這個 console 不也得刪掉么?
但是 logpoint 不用,它就是個斷點的設定,不在代碼里,
當然,最重要的是 Debugger 除錯是可以看到呼叫堆疊和作用域的!
首先是呼叫堆疊,它就是代碼的執行路線,
比如這個 App 的函陣列件,你可以看到渲染這個函陣列件會經歷 workLoop、beginWork、renderWithHooks 這些流程:

你可以點開呼叫堆疊的每一幀看下都執行了啥邏輯,用到啥資料,比如可以看到這個函陣列件的 fiber 節點:

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


可以看到呼叫堆疊來理清出錯前都走了哪些代碼,可以通過作用域來看到每一個變數的值,
有了這些東西,排查錯誤不就很輕松了么!
而你用 console.log 呢?
啥也沒,只能自己猜,
由于本篇文章都是gif動圖,今天上傳太累了,要看全文,請點擊以下鏈接:https://cybozudev.kf5.com/hc/community/question/34258651/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/550354.html
標籤:JavaScript
上一篇:盤點國內前端npm CDN替代方案,基本上可以替代unpkg、jsdelivr
下一篇:javascript
