Wstrzymywanie kodu z punktami przerwania

Sofia Emelianova
Sofia Emelianova

Użyj punktów przerwania, aby wstrzymać kod JavaScript. W tym przewodniku opisujemy poszczególne typy punktów przerwania dostępnych w Narzędziach deweloperskich, a także wyjaśniamy, kiedy ich używać i jak ustawić każdy z nich. Interaktywny samouczek dotyczący procesu debugowania znajdziesz w artykule Pierwsze kroki z debugowaniem JavaScriptu w Narzędziach deweloperskich Chrome.

Omówienie sytuacji, w których należy używać poszczególnych typów punktów granicznych

Najbardziej znanym typem punktu przerwania jest linia kodu. Jednak ustawianie punktów przerwania wiersza kodu może być nieefektywne, zwłaszcza gdy nie wiesz dokładnie, gdzie szukać, lub pracujesz z dużą bazą kodu. Wiedząc, jak i kiedy używać innych typów punktów przerwania, możesz zaoszczędzić czas podczas debugowania.

Typ punktu przerwaniaUżywaj, gdy chcesz ...
Linia koduWstrzymaj ruch w konkretnym fragmencie kodu.
Warunkowy wiersz koduWstrzymanie działania w określonym regionie kodu, ale tylko wtedy, gdy spełniony jest inny warunek.
LogpointZarejestruj komunikat w Konsoli bez wstrzymywania wykonania.
DOM,Wstrzymaj kod, który zmienia lub usuwa określony węzeł DOM lub jego elementy podrzędne.
XHRWstrzymaj, gdy adres URL XHR zawiera wzór ciągu znaków.
Detektor zdarzeniaWstrzymaj kod, który działa po wywołaniu zdarzenia, np. click.
WyjątekWstrzymaj wiersz kodu, który powoduje wyrzucenie wyjątku (wykryty lub niewykryty).
FunkcjaWstrzymaj przy każdym wywołaniu konkretnej funkcji.
Typ zaufaniaWstrzymanie przy naruszeniach zasad dotyczących zaufanych typów.

Punkty przerwania wiersza kodu

Użyj punktu przerwania kodu, gdy znasz dokładny obszar kodu, który chcesz zbadać. DevTools zawsze się zatrzymuje przed wykonaniem tego wiersza kodu.

Aby ustawić punkt przerwania w kodzie w Narzędziach deweloperskich:

  1. Kliknij panel Źródła.
  2. Otwórz plik zawierający wiersz kodu, w którym chcesz przerwać pracę.
  3. Przejdź do wiersza kodu.
  4. Po lewej stronie wiersza kodu znajduje się kolumna z numerem wiersza. Kliknij ją. U góry kolumny z numerem wiersza pojawi się niebieska ikona.

Punkt przerwania w kodzie.

Ten przykład pokazuje punkt przerwania kodu ustawiony w wierszu 29.

punkty kontrolne w kodzie,

Zadzwoń pod numer debugger ze swojego kodu, aby zatrzymać się na tej linii. Jest to odpowiednik punktu przerwania wiersza kodu, z tym że jest on ustawiony w kodzie, a nie w interfejsie Narzędzi deweloperskich.

console.log('a');
console.log('b');
debugger;
console.log('c');

Warunkowe punkty przerwania w linii kodu

Użyj warunkowego punktu przerwania linii kodu, gdy chcesz zatrzymać wykonywanie programu, ale tylko wtedy, gdy spełniony jest określony warunek.

Takie punkty przełamania są przydatne, gdy chcesz pominąć przerwy, które nie mają znaczenia w Twoim przypadku, zwłaszcza w pętli.

Aby ustawić warunkowy punkt przerwania w linii kodu:

  1. Otwórz panel Źródła.
  2. Otwórz plik zawierający wiersz kodu, który chcesz przerwać.
  3. Przejdź do wiersza kodu.
  4. Po lewej stronie wiersza kodu znajduje się kolumna z numerem wiersza. Kliknij go prawym przyciskiem myszy.
  5. Kliknij Dodaj warunkowy punkt przerwania. Pod wierszem kodu wyświetli się okno.
  6. Wpisz stan w oknie dialogowym.
  7. Naciśnij Enter, aby aktywować punkt przerwania. Powyżej kolumny numeru wiersza pojawi się pomarańczowa ikona z iksem.

Warunkowy punkt przerwania w linii kodu.

Ten przykład pokazuje warunek w linii kodu, który jest wykonywany tylko wtedy, gdy wartość x jest większa niż 10 w pętli w iteracji i=6.

Logowanie punktów przerwania linii kodu

Używaj punktów przerwania w linii kodu (punktów logowania), aby rejestrować komunikaty w Konsoli bez wstrzymywania wykonania i zaśmiecania kodu wywołaniami funkcji console.log().

Aby ustawić punkt logowania:

  1. Otwórz panel Źródła.
  2. Otwórz plik zawierający wiersz kodu, który chcesz przerwać.
  3. Przejdź do wiersza kodu.
  4. Po lewej stronie wiersza kodu znajduje się kolumna z numerem wiersza. Kliknij go prawym przyciskiem myszy.
  5. Kliknij Dodaj punkt logowania. Pod wierszem kodu wyświetli się okno.
  6. Wpisz wiadomość z dziennika w oknie. Możesz użyć tej samej składni co w przypadku wywołania console.log(message).

    Możesz na przykład rejestrować:

    "A string " + num, str.length > 1, str.toUpperCase(), obj
    

    W tym przypadku zarejestrowany komunikat:

    // str = "test"
    // num = 42
    // obj = {attr: "x"}
    A string 42 true TEST {attr: 'x'}
    
  7. Aby aktywować punkt przerwania, naciśnij Enter. U góry kolumny numeru linii pojawi się różowa ikona z 2 kropkami.

Punkt logowania, który zapisuje w Konsoli ciąg znaków i wartość zmiennej.

Ten przykład pokazuje punkt logowania na linii 30, który rejestruje ciąg znaków i wartość zmiennej w Konsoli.

Edytowanie punktów przerwania w kodzie

W sekcji Punkty przerwania możesz wyłączać, edytować i usuwać punkty przerwania wiersza kodu.

Edytowanie grup punktów przerwania

Sekcja Punkty przerwania grupuje punkty przerwania według pliku i porządkuje je według numerów wiersza i kolumny. W grupach możesz wykonywać te czynności:

  • Aby zwinąć lub rozwinąć grupę, kliknij jej nazwę.
  • Aby włączyć lub wyłączyć grupę lub punkt kontrolny, kliknij Pole wyboru. obok grupy lub punktu kontrolnego.
  • Aby usunąć grupę, najedź na nią kursorem i kliknij Zamknij..

Ten film pokazuje, jak zwijać grupy i wyłączać lub włączać punkty przerwania pojedynczo lub według grup. Gdy wyłączysz punkt przerwania, jego znacznik obok numeru wiersza w panelu Źródła stanie się przezroczysty.

Grupy mają menu kontekstowe. W sekcji Punkty przerwania kliknij grupę prawym przyciskiem myszy i wybierz:

Menu kontekstowe grupy.

  • Usuń wszystkie punkty przerwania w pliku (grupie).
  • Wyłącz wszystkie punkty przerwania w pliku.
  • Włącz wszystkie punkty przerwania w pliku.
  • usunąć wszystkie punkty przerwania (we wszystkich plikach).
  • usunąć inne punkty przerwania (w innych grupach).

Edytuj punkty przerwania

Aby edytować punkt przerwania:

  • Kliknij Pole wyboru. obok punktu kontrolnego, aby go włączyć lub wyłączyć. Gdy wyłączysz punkt przerwania, jego znacznik obok numeru wiersza w panelu Źródła stanie się przezroczysty.
  • Najedź kursorem na punkt przerwania i kliknij Edytuj., aby go edytować, lub Zamknij., aby go usunąć.
  • Podczas edytowania punktu kontrolnego zmień jego typ na liście w edytorze wbudowanym.

    Zmiana typu punktu przerwania.

  • Kliknij prawym przyciskiem myszy punkt przerwania, aby wyświetlić jego menu kontekstowe, i wybierz jedną z opcji:

    Menu kontekstowe punktu przerwania.

    • Pokaż lokalizację.
    • Edytuj warunek lub punkt logowania.
    • Włącz wszystkie punkty przerwania.
    • Wyłącz wszystkie punkty przerwania.
    • Usuń punkt przerwania.
    • usunąć inne punkty przerwania (we wszystkich plikach).
    • usunąć wszystkie punkty przerwania (we wszystkich plikach).

Obejrzyj film, aby zobaczyć, jak działają różne opcje edycji punktów kontrolnych: wyłączanie, usuwanie, edytowanie warunku, wyświetlanie lokalizacji z menu i zmienianie typu.

Pomijanie punktów przerwania za pomocą opcji „Nigdy nie wstrzymuj w tym miejscu”

Aby pominąć pauzy, które występują z innych powodów, użyj punktu przecięcia kodu o nazwie Never pause here. Może to być przydatne, gdy masz włączone wyjątkowe punkty przerwania, ale debuger ciągle zatrzymuje się w wyjątku szczególnie głośnym wyjątkiem, którego debugowanie nie jest Ci potrzebne.

Aby wyciszyć lokalizację przerwy:

  1. Na panelu Źródła otwórz plik źródłowy i znajdź wiersz, którego nie chcesz podzielić.
  2. Kliknij prawym przyciskiem myszy numer wiersza w kolumnie Numer wiersza po lewej stronie obok instrukcji, która powoduje przerwanie.
  3. W menu wybierz Nigdy nie wstrzymuj tutaj. Obok wiersza pojawi się pomarańczowy (warunkowy) punkt przerwania.

Możesz też wyciszyć punkt przerwania na czas wstrzymania wykonania. Obejrzyj następny film, aby dowiedzieć się, jak to zrobić.

Opcja Nigdy nie wstrzymywać tutaj pozwala wyciszyć instrukcje debuggera i wszystkie inne typy punktów przerwania z wyjątkiem punktów przerwania w wierszu kodu i punktów przerwania detektora zdarzeń.

Wyrażenie Never pause here może nie działać w wierszu z wieloma instrukcjami, jeśli instrukcja, która nie powinna być wstrzymywana, różni się od instrukcji, która powoduje wstrzymanie. W źródłowym kodzie mapowanym nie każda lokalizacja punktu przecięcia odpowiada pierwotnemu oświadczeniu, które powoduje przerwę.

Punkty przerwania zmian w DOM

Użyj punktu przerwania zmiany modelu DOM, gdy chcesz wstrzymać kod, który zmienia węzeł modelu DOM lub jego elementy.

Aby ustawić punkt przerwania zmiany DOM:

  1. Kliknij kartę Elementy.
  2. Przejdź do elementu, dla którego chcesz ustawić punkt przerwania.
  3. Kliknij element prawym przyciskiem myszy.
  4. Najedź na Przerwij, a następnie wybierz Modyfikacje poddrzewa, Modyfikacje atrybutów lub Usuwanie węzła.

Menu kontekstowe służące do tworzenia punktu zmiany w DOM.

Ten przykład pokazuje menu kontekstowe do tworzenia punktu zmiany w DOM.

Listę punktów przerwania zmian w DOM znajdziesz w:

  • Panel Elementy > Punkty przerwania DOM.
  • Źródła > Panel boczny Punkty przerwania DOM.

Lista punktów przerwania DOM w panelach Elementy i Źródła.

Możesz tam:

  • Możesz je włączać i wyłączać za pomocą Pole wyboru..
  • Kliknij prawym przyciskiem myszy > Usuń lub Pokaż w DOM.

Typy punktów przerwania zmian w DOM

  • Modyfikacje poddrzewa. Wywoływane, gdy węzeł podrzędny bieżąco wybranego węzła zostanie usunięty lub dodany albo gdy zmieni się zawartość węzła podrzędnego. Nie jest wywoływany w przypadku zmian atrybutów węzła podrzędnego ani zmian w bieżąco wybranym węźle.
  • Modyfikacje atrybutów: wywoływane po dodaniu lub usunięciu atrybutu w obecnie wybranym węźle albo gdy zmieni się jego wartość.
  • Usuwanie węzła: wywoływane po usunięciu aktualnie wybranego węzła.

Punkty przerwania żądań XHR/pobrania

Użyj punktu przerwania żądań XHR/pobrania, gdy chcesz przerwać działanie, gdy adres URL żądania XHR zawiera określony ciąg znaków. Narzędzia deweloperskie wstrzymają się na wierszu kodu, w którym wywołanie XHR to send().

Może się to przydać np. wtedy, gdy zauważysz, że Twoja strona wysyła żądanie do nieprawidłowego adresu URL, a Ty chcesz szybko znaleźć kod źródłowy AJAX lub Fetch, który powoduje nieprawidłowe żądanie.

Aby ustawić punkt przerwania żądań XHR/pobrania:

  1. Kliknij panel Źródła.
  2. Rozwiń panel Punkty przerwania żądań XHR.
  3. Kliknij Dodaj. Dodaj punkt przerwania.
  4. Wpisz ciąg znaków, który chcesz podzielić. Narzędzia deweloperskie wstrzymują się, gdy ten ciąg znaków występuje w dowolnym miejscu w adresie URL żądania XHR.
  5. Aby potwierdzić, naciśnij Enter.

Tworzenie punktu przerwania żądań XHR/pobrania.

Ten przykład pokazuje, jak utworzyć punkt przerwania żądań XHR/pobrania w sekcji Punkty przerwania żądań XHR/pobrania dla dowolnego żądania zawierającego w adresie URL ciągorg.

Punkty przerwania detektora zdarzeń

Jeśli chcesz wstrzymać działanie kodu odbiornika po wywołaniu zdarzenia, używaj punktów przerwania detektora zdarzeń. Możesz wybrać konkretne zdarzenia, np. click, lub kategorie zdarzeń, np. wszystkie zdarzenia myszy.

  1. Kliknij panel Źródła.
  2. Rozwiń panel Punkty przerwania detektora zdarzeń. Narzędzia deweloperskie wyświetlają listę kategorii zdarzeń, takich jak Animacja.
  3. Zaznacz jedną z tych kategorii, aby wstrzymać działanie reklamy, gdy zostanie wywołane dowolne zdarzenie z tej kategorii, lub rozwiń kategorię i zaznacz konkretne zdarzenie.

Tworzę punkt przerwania detektora zdarzeń.

Ten przykład pokazuje, jak utworzyć punkt przerwania detektora zdarzeń dla deviceorientation.

Dodatkowo debuger wstrzymuje działanie na zdarzeniach, które występują w elementach roboczych sieci lub elementach roboczych dowolnego typu, w tym elementach roboczych udostępnionego miejsca na dane.

Debuger został wstrzymany na zdarzeniu związanego z usługą działającą w tle.

Ten przykład pokazuje Debuger wstrzymany na zdarzeniu setTimer, które miało miejsce w usługowym workerze.

Listę detektorów zdarzeń znajdziesz też w panelu Elementy > Detektory zdarzeń.

Punkty przerwania wyjątków

Użyj punktów przerwania wyjątku, gdy chcesz wstrzymać działanie programu na linii kodu, która powoduje wyjątek złapany lub niezłapany. Możesz wstrzymywać działanie obu tych wyjątków niezależnie w dowolnej sesji debugowania innej niż Node.js.

W sekcji Punkty przerwania w panelu Źródła włącz jedną lub obie z tych opcji, a następnie wykonaj kod:

  • Zaznacz Pole wyboru. Wstrzymaj przy niewykrytych wyjątkach.

    Wstrzymane przy niewykrytym wyjątku, gdy odpowiednie pole wyboru jest włączone.

    W tym przykładzie wykonanie jest wstrzymywane przy niewykrytym wyjątku.

  • Zaznacz Pole wyboru. Wstrzymaj przy wykrytych wyjątkach.

    Wstrzymano przy wykrytym wyjątku, gdy włączono odpowiedni znacznik wyboru.

    W tym przykładzie wykonanie jest wstrzymane na zaobserwowanym wyjątku.

Wyjątki w wywołaniach asynchronicznych

Gdy pole wyboru Przechwytywanie i nieprzechwytywanie jest włączone (lub oba te pola), Debuger próbuje zatrzymać się na odpowiednich wyjątkach zarówno w wywołaniach synchronicznych, jak i asynchronicznych. W przypadku asynchroniczności Debuger wyszukuje w obietnicach obsługi odrzucenia, aby określić, kiedy się zatrzymać.

Przechwycone wyjątki i ignorowany kod

Gdy włączona jest lista ignorowanych, debuger zatrzymuje się na wyjątkach wykrytych w ramkach nieignorowanych lub przechodzących przez taki element w zbiorze wywołań.

Następujący przykład pokazuje Debuger wstrzymany na wyjętym z uwzględnienia wyjątku library.js, który przechodzi przez niewyjęty z uwzględnienia mycode.js.

Wstrzymana w przypadku wykrytego wyjątku, który przechodzi przez nieignorowaną ramkę w stosie wywołań.

Aby dowiedzieć się więcej o działaniu Debuggera w trudnych przypadkach, przetestuj zbiór scenariuszy na tej stronie demonstracyjnej.

Punkty przerwania funkcji

Wywołaj funkcję debug(functionName), gdzie functionName to funkcja, którą chcesz debugować, gdy chcesz wstrzymać działanie programu po wywołaniu określonej funkcji. Możesz wstawić debug() do kodu (np. jako instrukcję console.log()) lub wywołać go z konsoli Narzędzi deweloperskich. debug() jest równoznaczne z ustawieniem punktu przerwania kodu na pierwszym wierszu funkcji.

function sum(a, b) {
  let result = a + b; // DevTools pauses on this line.
  return result;
}
debug(sum); // Pass the function object, not a string.
sum();

Upewnij się, że funkcja docelowa znajduje się w zakresie

Jeśli funkcja, którą chcesz debugować, nie jest uwzględniona w zakresie, narzędzia deweloperskie zwraca błąd ReferenceError.

(function () {
  function hey() {
    console.log('hey');
  }
  function yo() {
    console.log('yo');
  }
  debug(yo); // This works.
  yo();
})();
debug(hey); // This doesn't work. hey() is out of scope.

Sprawdzenie, czy funkcja docelowa znajduje się w zakresie, może być trudne, jeśli wywołujesz funkcję debug() z poziomu konsoli DevTools. Oto jedna z nich:

  1. Ustaw punkt przerwania w kodzie w miejscu, w którym funkcja jest widoczna.
  2. Wywołaj punkt przerwania.
  3. Wywołaj debug() w konsoli Narzędzia deweloperskie, gdy kod jest nadal wstrzymany na punkcie przerwania w linii kodu.

Punkty przerwania zaufanych typów

Interfejs Trusted Type API zapewnia ochronę przed lukami w zabezpieczeniach, które są wykorzystywane w atakach cross-site scripting (XSS).

W sekcji Punkty kontrolne w panelu Źródła przejdź do sekcji Punkty kontrolne naruszenia zasad CSP i włącz jedną lub obie z tych opcji, a potem wykonaj kod:

  • Sprawdź Pole wyboru. Naruszenie ujścia.

    Wstrzymano przy naruszeniu zasad dotyczących ścieżki, gdy włączono odpowiedni znacznik wyboru.

    W tym przykładzie wykonanie jest wstrzymane z powodu naruszenia dotyczącego zlewania.

  • Sprawdź Pole wyboru. Naruszenia zasad.

    Wstrzymane z powodu naruszenia zasad, gdy włączone jest odpowiednie pole wyboru.

    W tym przykładzie wykonanie jest wstrzymane z powodu naruszenia zasad. Zasady zaufanych typów są konfigurowane za pomocą trustedTypes.createPolicy.

Więcej informacji o korzystaniu z interfejsu API: