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 przełamania dostępne w narzędziu DevTools, a także podajemy, kiedy i jak je ustawiać. Interaktywny samouczek dotyczący procesu debugowania znajdziesz w artykule Pierwsze kroki z debugowaniem JavaScriptu w Narzędziach deweloperskich w 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 punkty przerwania w kodzie mogą być niewydajne, zwłaszcza jeśli nie wiesz, gdzie dokładnie 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żyj tej opcji, gdy chcesz:
Linia koduWstrzymanie w określonym regionie kodu.
Warunkowa linia koduWstrzymanie działania w określonym regionie kodu, ale tylko wtedy, gdy spełniony jest inny warunek.
LogpointZarejestruj komunikat w Konsoli bez wstrzymywania wykonania.
DOMWstrzymaj 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 zdarzeńWstrzymaj kod, który jest wykonywany po wywołaniu zdarzenia, np. click.
WyjątekWstrzymaj wiersz kodu, który powoduje wyrzucenie wyjątku (wykryty lub niewykryty).
FunkcjaZatrzymaj działanie, gdy wywołana zostanie określona funkcja.
Typ zaufanychWstrzymanie przy naruszeniach zasad dotyczących zaufanych typów.

Punkty przerwania w kodzie

Użyj punktu przerwania kodu, gdy znasz dokładny obszar kodu, który chcesz zbadać. Narzędzie 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, który chcesz przerwać.
  3. Przejdź do wiersza kodu.
  4. Po lewej stronie wiersza kodu znajduje się kolumna z numerem wiersza. Kliknij ją. Pojawi się niebieska ikona nad kolumną numeru linii.

Punkt przerwania w kodzie.

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

punkty kontrolne w kodzie,

Aby wstrzymać działanie tego wiersza, wywołaj debugger w kodzie. Jest to równoznaczne z punktem kontrolnym w wierszu kodu, z tym że punkt kontrolny jest ustawiany 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 w 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 swój stan w oknie dialogowym.
  7. Aby aktywować punkt przerwania, naciśnij Enter. 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 bez zaśmiecania kodu wywołaniami 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 wierszu kodu

W sekcji Punkty przecięcia możesz wyłączać, edytować i usuwać punkty przecięcia linii 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 graniczne pojedynczo lub grupowo. Gdy wyłączysz punkt przerwania, w panelu Źródła jego znacznik obok numeru wiersza stanie się przezroczysty.

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

Menu kontekstowe grupy.

  • Usuń wszystkie punkty przerwania w pliku (grupa).
  • 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).

Edytowanie punktów przerwania

Aby edytować punkt przerwania:

  • Kliknij Pole wyboru. obok punktu kontrolnego, aby go włączyć lub wyłączyć. Gdy wyłączysz punkt przerwania, w panelu Źródła jego znacznik obok numeru wiersza stanie się przezroczysty.
  • Najedź kursorem na punkt kontrolny 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 kontrolny, aby wyświetlić 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 w kodzie o nazwie Never pause here. Może to być przydatne, gdy włączysz punkty przerwania wyjątków, ale debuger ciągle zatrzymuje się na szczególnie głośnym wyjątku, który nie interesuje Cię pod kątem debugowania.

Aby wyciszyć miejsce 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 wstrzymywać. Obok linii pojawi się pomarańczowy (warunkowy) punkt przerwania.

Możesz też wyciszyć punkt przerwania, gdy wykonanie jest wstrzymane. Aby dowiedzieć się więcej, obejrzyj kolejny film.

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 powodować wstrzymania, 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 punktów zmiany w DOM.

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

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

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

Możesz tam:

  • Włącz je lub wyłącz za pomocą Pole wyboru..
  • Kliknij prawym przyciskiem myszy > Usuń lub Pokaż w DOM-ie.

Typy punktów zmiany 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 uruchamiany w przypadku zmian atrybutów węzła podrzędnego ani zmian w bieżąco wybranym węźle.
  • Modyfikacje atrybutów: aktywowane, gdy atrybut zostanie dodany lub usunięty w wybranym węźle lub gdy zmieni się jego wartość.
  • Usunięcie węzła: jest wywoływane, gdy wybrany węzeł zostanie usunięty.

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 wstrzymają się, gdy ten ciąg pojawi się 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ń

Używaj punktów przerwania detektora zdarzeń, gdy chcesz wstrzymać kod detektora zdarzeń, który jest wykonywany po wywołaniu zdarzenia. 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.

Tworzenie punktu przerwania detektora zdarzeń.

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

Dodatkowo debuger wstrzymuje działanie w przypadku zdarzeń, które mają miejsce w elementach roboczych w przeglądarce lub elementach roboczych dowolnego typu, w tym elementach roboczych Shared Storage.

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 potem 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.

    Wstrzymywanie przy wykrytych wyjątkach, gdy włączony jest odpowiedni znacznik wyboru.

    W tym przykładzie wykonanie jest wstrzymywane w przypadku wykrytego wyjątku.

Wyjątki w wywołaniach asynchronicznych

Gdy jedno lub oba pola wyboru (caught i uncaught) są włączone, Debugger próbuje wstrzymać działanie w 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ć.

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.

Wstrzymano z powodu zarejestrowanego wyjątku, który przechodzi przez ramkę nieignorowaną w zbiorze 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, gdy zostanie wywołana dana funkcja. 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.

Jeśli wywołujesz funkcję debug() z poziomu konsoli DevTools, upewnienie się, że funkcja docelowa znajduje się w zakresie, może być trudne. 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: