使用斷點來暫停JavaScript代碼,審查變量的值和在特定時刻所調用的堆棧。
一旦你設置了斷點,你應該學習如何遍歷你的代碼,並審查你的變量和調用堆棧。
TL;DR
- 設置斷點的最基本的方法是在特定的代碼行上手動添加一個斷點。您也可以將這些斷點配置為僅在滿足特定條件時觸發。
- 您還可以設置在滿足一般條件時觸發的斷點,例如事件,DOM更改或未捕獲異常。
在代碼特定行上設置斷點
當您知道要審查的語句時,在特定代碼行上設置斷點很有用。例如,如果您的登錄流程未按預期工作,並且您的代碼中只有一個函數來處理登錄,那么可以安全地假設該錯誤可能在該函數中。在這種情況下,在該函數的第一行添加斷點是有意義的。
當你在一行代碼上設置斷點時,代碼總是會在這一行代碼上暫停,直到您刪除斷點,禁用它,或使其有條件觸發。
要在特定代碼行上設置斷點,首先打開Sources
(源文件)面板,並在左側的File Navigator
(文件導航器)窗格中選擇該腳本。如果找不到File Navigator
(文件導航器),按下Toggle file navigator
(切換文件導航器)按鈕()。
提示: 如果你使用縮略的代碼,點擊pretty print
(代碼美化)按鈕()使其可讀。
在源代碼的左側,您可以看到行號。這個區域稱為line number gutter
(行號槽)。單擊行號槽中的行號,就會在該行代碼上添加一個斷點。
如果一個表達式占了多行,並且你把一個行斷點放在這個表達式的中間,DevTools會在下一個表達式上設置斷點。例如,如果您嘗試在下面截圖中的第4行設置斷點,DevTools會自動將斷點放在第6行。
使一個行號斷點有條件
只有當您指定的條件為 true
時,才會觸發條件斷點。
右鍵單擊尚未設置斷點的行號,然后點擊Add conditional breakpoint
(添加條件斷點)來創建一個條件斷點。如果你已經在一行代碼上添加了斷點,並且希望使斷點有條件,右鍵單擊該斷點,並點擊Edit breakpoint
(編輯斷點)。
在文本字段中輸入你的條件,並按 Enter 鍵。
條件斷點是金黃色的。
刪除或禁用一個行號斷點
如果你想臨時忽略一個斷點,然后禁用它。右鍵單擊line number gutter
(行號槽)中該斷點,並選擇Disable breakpoint
(禁用斷點)。
如果你不再需要一個斷點,然后刪除它。右鍵單擊line number gutter
(行號槽)中該斷點,並選擇Remove breakpoint
(刪除斷點)。
您還可以在Sources
(源文件)面板上的Breakpoints
(斷點)窗格中管理所有腳本中的所有行號斷點。
要從Breakpoints
(斷點)窗格界面中刪除斷點,右鍵單擊該斷點,並選擇Remove breakpoint
(刪除斷點)。
要從此窗格中禁用斷點,請取消勾選其復選框。
要禁用所有斷點,右鍵單擊該窗格,並選擇Deactivate breakpoints
(停用斷點)。這個產生的效果與Disable All Breakpoints
(禁用所有斷點)選項是相同的。
您也可以在Sources
(源文件)面板上,通過點擊Deactivate breakpoints
(停用斷點)按鈕()來禁用所有斷點。
設置監測DOM變化的斷點
假設在你的代碼中有一個bug,比如錯誤地更改,刪除或添加DOM節點。DevTools提供了一個快速方式來查找這個問題的根本原因:DOM change breakpoints
(DOM變化斷點)。
而不是手動搜索導致DOM變化的代碼,DevTools允許您在節點上設置斷點。每當節點,或在某些情況下其子節點之一被添加,刪除或改變時,DevTools暫停頁面,並帶到到導致DOM變化確切的代碼行。
下面是一個現場演示,學習如何設置DOM change breakpoints
(DOM變化斷點)。單擊Increment
(增加)按鈕使Count
加1
。 現在就試試。
您在此互動教程中的目標是設置DOM change breakpoints
(DOM變化斷點),當Count
增加時觸發,以便您可以檢查修改Count
的代碼。
要想添加DOM change breakpoints
(DOM變化斷點):
- 在
Count
元素上右鍵單擊,然后選擇Inspect
(檢查)。DevTools將這個節點突出顯示為藍色。它應該是一個<p>
節點。您可以通過雙擊它來展開節點,以便您可以查看其內容。這樣可以驗證你在正確的節點上。 - 右鍵單擊突出顯示的節點,然后選擇
Break on
>Subtree Modifications
(子樹修改)。節點左側的藍色圖標表示在該節點上設置了DOM斷點。當節點突出顯示時,很難看到這個圖標,因為它是一個藍色的圖標,背景也是藍色的。
- 回到演示,單擊
Increment
(增加)按鈕。DevTools暫停該頁面,轉到Sources
(源文件)面板,並突出顯示腳本中導致更改的代碼行。 - 點擊
Resume script execution
(恢復腳本執行)按鈕兩次,可以恢復腳本執行。您需要按兩次,因為當計數文本被刪除時,斷點被觸發了一次,然后當文本用新計數更新時,斷點被再次觸發。
要在所選節點的屬性更改時,或者當所選擇的節點被刪除時中斷頁面進行調試,,只需在上面的步驟2中選擇Attributes modifications
(屬性修改)或Node Removal
(節點刪除)代替Subtree Modifications
(子樹修改)即可。
提示: 這些斷點不是排他的。您可以在單個節點上同時啟用兩個或所有三個斷點。
要想暫時關閉這個斷點:
- 在DevTools中回到
Elements
(元素)面板。 - 單擊
DOM Breakpoints
(DOM斷點)窗格。如果你的DevTools窗口很小,DOM Breakpoints
(DOM斷點)窗格可能隱藏在溢出菜單后面。您應該可以看到一個復選框,旁邊有文字,和
p
下面的Subtree Modifications
(子樹修改)。 - 取消勾選
Subtree Modifications
(子樹修改)旁邊的復選框。 - 在Demo頁面上,嘗試再次點擊
Increment
(增加)按鈕。計數器將遞增,並且DevTools不再暫停頁面。
提示: 將鼠標懸停在p
上可以在視口中突出顯示節點。單擊p
可以在Elements
(元素)面板中選中這個節點。
要想刪除這個斷點:
- 轉到
DOM Breakpoints
(DOM斷點)窗格。 - 右鍵單擊要刪除的斷點,然后選擇
Remove breakpoint
(刪除斷點)。
更多關於DOM change breakpoints
(DOM變化斷點)類型
以下是有關每種類型的DOM change breakpoints
(DOM變化斷點)具體觸發時間和觸發方式的詳細信息:
Subtree Modifications
(子樹修改) - 當當前選定節點的子節點被刪除,添加或子節點的內容發生更改時觸發。當子節點屬性改變時,或當前選擇的節點發生任何改變,都不會觸發該類型的斷點。Attributes modifications
(屬性修改) - 當在當前選定的節點上添加或刪除屬性時,或當屬性值改變時觸發。Node Removal
(節點刪除) -當當前選定的節點被刪除時觸發。
在XHR上中斷
有兩種方法可以觸發XHR上的斷點:當任何XHR到達XHR生命周期的某個階段時(readystatechange
,load
等),或者當XHR的URL與某個字符串匹配時。
如果你想在XHR生命周期的某個階段時中斷,請在事件偵聽器斷點窗格中查看XHR目錄。
要在XHR的URL與某個字符串匹配時中斷,請使用Sources
(源文件)面板上的XHR Breakpoints
(XHR斷點)窗格。
點擊“+”(加號)按鈕添加一個新的斷點模式。在文本字段中輸入你的字符串,並按Enter鍵保存。
提示:點擊“+”(加號),然后立即按Enter鍵,可以在發送任何XHR之前觸發斷點。
當一個事件觸發時中斷
當某事件(例如,click
(點擊))或事件類別(例如,任何mouse
(鼠標)事件)被觸發時,使用Sources
(源文件)面板上的Event Listener Breakpoints
(事件偵聽器斷點)窗格中斷。
頂層表示事件的類別。勾選其中一個復選框,以便在觸發該類別的任何事件時暫停。展開頂級類別可以查看其包含的事件。
如果要監視特定事件,找到事件所屬的頂級類別,然后勾選目標事件旁邊的復選框。
在未捕獲的異常上中斷
如果你的代碼拋出異常,你不知道他們來自哪里,點擊Sources
(源文件)面板上的pause on exception
(在異常上暫停)按鈕()。
DevTools在拋出異常的行自動中斷。
說明
翻譯自:https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints
本文內容來自:Chrome DevTools谷歌瀏覽器開發者工具如何設置斷點 – Break易站
—Author: Arvin Chen —Web Address: www.breakyizhan.com (Break易站)