開發必備,摸索不完的 Chrome DevTools 小技巧之設置斷點篇

一起來認識如何設置斷點,查找 bug 吧

Lai
UnaLai
7 min readAug 16, 2020

--

在撰寫程式遇到 Bug 時,可以下 console 指令,印出資料,確認程式邏輯。但這個過程需要不斷猜測可能錯誤的地方,再補上多個 console 指令,效率不佳。因此查找錯誤邏輯時,應該可以使用更好的工具,也就是 Chrome DevTools 的設置斷點功能,來協助我們查找。

本文章為節錄 Chrome DevTools 文件,重新整理後的重點筆記。

範例:Demo: Get Started Debugging JavaScript with Chrome DevTools

➤ 認識面板

打開面板

  • 在網頁中點選右鍵 → 檢查
  • 快捷鍵
    Mac:Command+Option+I
    Windows 或 Linux:Control+Shift+I

切換至 Source tab

Source tab 即為 Debugger 介面。大致可分為三大區塊

  • 第一區塊:File Navigator。列出頁面請求的每個文件。
  • 第二區塊:Code Editor。點擊 File Navigator 中的任一文件,文件內容會顯示在此處。
  • 第三區塊:JavaScript Debugging。Debugger 的各種工具。

➤ 認識設置斷點的多種方法

斷點,指的是程式碼運行時,欲中斷的地方。中斷後即可利用 Debugger 的各種工具,逐行檢視程式碼或是以 function 為單位檢視程式碼,並可查看當下 scope 當中的 Local 及 Global 值,逐步找出錯誤邏輯。

有以下七種設置斷點的方式:

  1. Line-of-code:指定某一行程式碼
  2. Conditional line-of-code:指定某一行程式碼,並設置特定條件。
  3. DOM:指定 DOM 節點,當 DOM 節點被更改或是刪除時。
  4. XHR:指定字串。當該字串包含於 XHR URL 時。
  5. 事件監聽器:指定欲中斷的事件,例如滑鼠事件中的 click
  6. 例外:造成錯誤捕獲或是未捕獲的程式碼
  7. 功能:指定程式碼中的特定功能,每次調用時,就停止。

以下以筆者較常使用的兩個斷點方式介紹, Line-of-code、事件監聽器。

Line-of-code

點擊程式碼行號,並可以於 JavaScript Debugging 區塊中的 Breakpoints 看見添加的斷點。

若想刪除設置,可再點擊一次行號,或是從 JavaScript Debugging 區塊中的 Breakpoints 點擊右鍵 → Remove breakpoint 。

若將斷點設置於函數第一行,則相當於功能斷點的用途。

事件監聽器

點擊 JavaScript Debugging 區塊當中的 Event Listener Breakpoints。即可勾選欲作為斷點的事件。

例如 Click 事件,可於 Mouse 事件中找到。以 Chrome DevTools 文件範例為例(Demo: Get Started Debugging JavaScript with Chrome DevTools)。勾選了 Click 事件後,點選畫面中的 Button,則可進入 Debugger 模式,如以下畫面所示。

➤ 認識 Debugger 的工具

設置好斷點後,接下來需要檢視程式碼。有以下幾種檢視方式:

按鈕 1

執行程式碼直到遇到斷點。當設置多個斷點時,可以於一個斷點當下,按下此按鈕,會快速執行至下一個斷點。若已無下一個斷點,則執行至結束。

按鈕 2

執行完目前所在的程式碼行,並跳至下一行。如果目前所在的程式碼行為方法呼叫,也會執行並略過方法的執行過程,直接跳至執行完方法後的下一行程式碼。

如以下範例,將斷點設置於 let some = getSome() ,則會完全跳過 getSome 的逐步執行過程,跳至 return some + a

此按鈕用於確定某個方法沒有問題,不需要逐行查看時。

按鈕 3

逐行檢視程式碼

按鈕 4

執行程式碼當前位置所在的函數剩餘部分,並跳至下一個語句。以上述範例為例子,將斷點設置於 let some = getSome() ,則會完全跳過 addSome 的逐步執行過程,跳至 console.log(addSome(3))

➤ 其他

查看或編輯局部、必包、全局屬性

每一次程式碼運行時,都可以從 JavaScript Debugging 區塊中的 scope 查看屬性值。例如當程式碼執行至 alert(name); 時,可看見以下屬性,亦可以直接使用滑鼠雙擊修改屬性值。

查看當前的 call stack

以上述範例為例子,當程式碼執行至 alert(name); 時,可於 JavaScript Debugging 區塊中 Call Stack 查看當下的 call stack,如下圖:

觀測自定義的 JavaScript 表達式的值

在功能中,可能有一些關鍵值,會在因各個函數的執行而有所變化。這時可以特別觀測此值。
例如有以下程式碼,欲持續觀測 num 的值。

點擊 JavaScript Debugging 區塊中 Scope 旁的 Watch → 點選加號→輸入欲觀測的值,例如 num,亦可以依照需求輸入其他表達式,例如 num > 3。

隨著程式碼的執行,可看見 num 的變化。

以上是今天的小分享,有任何問題都歡迎留言指教,謝謝 😊

--

--

Lai
UnaLai

我是一名前端工程師,我熱愛學習與分享 ❤︎