W jaki sposób przerywając wykonywanie skryptu, jeśli nie chcę kontynuować, podczas przechodzenia przez kod JavaScript w debugerze Google Chrome? Jedyny sposób, jaki znalazłem, to zamknięcie okna przeglądarki.
Naciśnięcie „Załaduj ponownie tę stronę” uruchamia resztę kodu, a nawet przesyła formularze, jak naciśnięcie F8 „Kontynuuj”.
AKTUALIZACJA :
Po naciśnięciu F5 (Odśwież), gdy skrypt jest wstrzymany:
- Google Chrome (v22) uruchamia skrypt. Jeśli skrypt prześle żądanie HTTP, zostanie wyświetlona odpowiedź HTTP na to żądanie. Oryginalna strona nie jest odświeżana.
- IE 9 po prostu zawiesza się. Jednak IE ma opcję „Zatrzymaj debugowanie”, która po naciśnięciu (pod warunkiem, że nie nacisnąłeś F5 wcześniej), nadal uruchamia skrypt poza debuggerem.
- Firebug zachowuje się identycznie jak Chrome.
Zamykanie, a następnie ponowne otwieranie okna przeglądarki nie zawsze jest kolejnym najłatwiejszym sposobem, ponieważ zabija stan sesji przeglądarki i może to być ważne. Wszystkie punkty przerwania również zostaną utracone.
AKTUALIZACJA (styczeń 2014) :
Odśwież podczas debugowania:
- Chrome v31: pozwala na uruchamianie skryptów i zatrzymuje się na kolejnych punktach przerwania (ale nie przesyła żądań ajax), a następnie odświeża.
- IE 11: odświeżanie nic nie robi, ale możesz nacisnąć F5, aby kontynuować.
- Firefox v26: pozwala na uruchamianie skryptów, ale nie zatrzymuje się na kolejnych punktach przerwania, wysyła żądania ajax, a następnie odświeża.
Rodzaj postępu!
Przejdź do tej samej strony podczas debugowania:
- Chrome v31: taki sam jak Odśwież.
- IE 11: skrypty są zakończone, uruchamiana jest nowa sesja przeglądarki (tak samo jak zamykanie i ponowne otwieranie).
- Firefox v26: nic się nie dzieje.
Również Juacala zasugerował skuteczne obejście tego problemu. Na przykład, jeśli używasz jQuery, uruchomienie delete $ z konsoli zatrzyma wykonywanie po napotkaniu dowolnej metody jQuery. Przetestowałem to we wszystkich powyższych przeglądarkach i mogę potwierdzić, że działa.
AKTUALIZACJA (marzec 2015) :
Wreszcie, po ponad 2 latach i prawie 10 000 wyświetleń, prawidłowa odpowiedź została udzielona przez Alexandra K. Google Chrome ma własnego Menedżera zadań, który może zabić proces tabulacji bez zamykania samej karty, zachowując wszystkie punkty przerwania i inne rzeczy nietknięte.
Poszedłem nawet do BrowserStack.com, aby przetestować go w Chrome v22 i stwierdziłem, że działało to w ten sposób nawet w tym czasie.
Obejście Juacali jest nadal przydatne podczas debugowania w IE lub Firefox.
AKTUALIZACJA (styczeń 2019) :
Chrome Dev Tools w końcu dodał właściwy sposób, aby zatrzymać wykonywanie skryptu, co jest miłe (choć nieco ukryte). Szczegółowe informacje można znaleźć w odpowiedzi Jamesa Gentesa.
debugger;
w konsoli narzędzi deweloperskich, a natychmiast uruchomi debugger i zatrzyma skrypt.Odpowiedzi:
W Chrome jest „Menedżer zadań”, dostępny przez Shift+ ESClub przez
Możesz wybrać zadanie strony i zakończyć je, naciskając przycisk „Zakończ proces”.
źródło
chrome 48
spowoduje to ZAMKNIĘCIE narzędzia Dev, a nie zamknie go, otwierając ponownie, widać, że program nadal działa (tried setInterval()
)Od kwietnia 2018 r. Możesz zatrzymać nieskończone pętle w Chrome :
Zwróć także uwagę na klawisze skrótów: F8i Ctrl+\
źródło
body
element tutaj na SO, ustawiłem „przerwa na -> modyfikacje poddrzewa”, a następnie kliknąłem gdziekolwiek. Przycisk wygląda jak na zrzucie ekranu, który opublikowałem.Jednym ze sposobów na to jest pauza w skrypcie, zobacz, jaki kod następuje po tym, gdzie jesteś aktualnie zatrzymany, np .:
W konsoli wykonaj następujące czynności:
Następnie uruchom skrypt: spowoduje błąd krytyczny podczas próby uzyskania dostępu
somethingElse
, a skrypt umrze. Voila, zakończyłeś skrypt.EDYCJA: Pierwotnie usunąłem zmienną. To nie jest wystarczająco dobre. Musisz usunąć funkcję lub obiekt, którego JavaScript próbuje uzyskać dostęp do właściwości.
źródło
you have to delete a function or an object
taki paskudny hack! (w interfejsie ładnie pasowałby jako przycisk zabicia wszystkich )Aktualizacja kwietniowa 2020
Od Chrome 80 żadna z obecnych odpowiedzi nie działa. Nie ma widocznego przycisku „Pauza” - musisz długo kliknąć przycisk „Odtwórz”, aby uzyskać dostęp do ikony Stop:
źródło
Jeśli napotkasz to podczas korzystania z
debugger
instrukcji,... wtedy myślę, że strona będzie działała wiecznie, dopóki środowisko uruchomieniowe js nie przyniesie wydajności lub do następnej przerwy. Zakładając, że znajdujesz się w trybie „włamanie po błędzie” (przełączanie ikony pauzy), możesz zapewnić, że nastąpi przerwa, wykonując coś takiego:
lub może wywołać nieistniejącą funkcję:
(Oczywiście to nie pomaga, jeśli próbują kroku przez funkcje, choć być może można dynamicznie dodawać w sposób
throw 1
lubz()
czy somesuch w panelu Źródła, ctrl-S, aby zapisać, a następnie Ctrl + R, aby odświeżyć ten ... może jednak pominąć jeden punkt przerwania, ale może działać, jeśli jesteś w pętli.)Jeśli wykonujesz pętlę i spodziewasz się
debugger
ponownie wywołać instrukcję, możesz po prostu wpisaćthrow 1
zamiast niej.Następnie, gdy naciśniesz Ctrl-R, zostanie uderzony następny rzut i strona zostanie odświeżona.
(testowane z Chrome v38, około kwietnia 2017 r.)
źródło
Dobre pytanie tutaj. Myślę, że nie można zakończyć wykonywania skryptu. Chociaż nigdy go nie szukałem, od dłuższego czasu korzystam z debuggera Chrome. Zazwyczaj ustawiam punkty przerwania w kodzie javascript, a następnie debuguję fragment kodu, który mnie interesuje. Kiedy kończę debugowanie tego kodu, zwykle po prostu uruchamiam resztę programu lub odświeżam przeglądarkę.
Jeśli chcesz uniemożliwić wykonanie pozostałej części skryptu (np. Z powodu wywoływanych wywołań AJAX), jedyne, co możesz zrobić, to usunąć ten kod z konsoli w locie, zapobiegając w ten sposób tym wywołaniom przed egzekucją , możesz bez problemu wykonać pozostały kod.
Mam nadzieję, że to pomoże!
PS: Próbowałem znaleźć opcję zakończenia wykonywania w niektórych samouczkach / przewodnikach, takich jak poniższe, ale nie mogłem jej znaleźć. Jak powiedziałem wcześniej, prawdopodobnie nie ma takiej opcji.
http://www.codeproject.com/Articles/273129/Beginner-Guide-to-Page-and-Script-Debugging-with-C
http://www.nsbasic.com/app/tutorials/TT10.htm
źródło
Nawiązując do odpowiedzi udzielonej przez @scottndecker na następujące pytanie , chrome udostępnia teraz opcję „wyłącz JavaScript” w Narzędziach programisty:
...
w prawym górnym roguDobrze, że możesz zatrzymać i uruchomić ponownie, po prostu zaznaczając / odznaczając to.
źródło
Możesz to zrobić, ale najpierw musisz przygotować kod.
Instrukcje zatrzymywania wykonywania skryptu w Narzędziach programistycznych Google Chrome:
(1) Najpierw przygotuj swój kod, tworząc zmienną globalną :
(2) W każdym miejscu, w którym chcesz wyjść, przetestuj wartość tej zmiennej:
(3) Wstrzymaj wykonywanie skryptu przed lub przed powyższymi liniami testowymi
(4) Przełącz na konsolę
(5) Typ:
(6) Kontynuuj wykonywanie skryptu. Skrypt
return false
uruchomi się, gdy wykona test z kroku (2) powyżejUwagi:
(A) Ta sztuczka działa ze zmiennymi globalnymi i obiektami, ale nie będzie działać ze zmiennymi lokalnymi. Zauważ, że to:
newVar = 'never used before';
tworzy nową właściwość obiektu okna (działa z powyższą sztuczką), podczas gdy to:
var newVar = 'never used before';
tworzy lokalną zmienną (NIE działa z powyższą sztuczką!)
(B) Tak więc nadal możesz użyć tej sztuczki z już działającym kodem if masz zmienną globalną lub obiekt, który zwróci false, jeśli ma określoną wartość.
(C) W skrócie, możesz użyć sztuczki juacala i usunąć element z DOM (na karcie elementów), który spowoduje błąd javascript. Załóżmy na przykład, że masz kod.
var cartype = $('#cartype').val();
Jeśli usuniesz element o ID =cartype
przed tym wierszem kodu, js zepsuje się w tym wierszu. Element ten będzie jednak nadal brakować podczas próby ponownego uruchomienia kodu. Trik opisany powyżej pozwala uruchomić i ponownie uruchomić kod ad infinitum.Więcej notatek:
(a) Wstaw punkt przerwania do kodu: po prostu wpisz
debugger;
sam wiersz. Jeśli DevTools jest otwarty, skrypt w tym momencie przejdzie do debuggera. Jeśli DevTools się nie otworzy, kod zignoruje instrukcję.(b) Chcesz uniknąć przeskakiwania do biblioteki jQuery podczas debugowania kodu? Blackbox to. Zobacz instrukcje dotyczące czarnej skrzynki dla przeglądarki Chrome lub Firefox
Wdzięczność (proszę odwiedzić i głosować):
JavaScript Debugowanie linia po linii za pomocą Google Chrome
Czy można zmienić wartości zmiennych javascript podczas debugowania w Google Chrome?
źródło
Any place where you may wish to quit, test the value of this variable
To okropne! Chcę rzucić palenie, gdziekolwiek się teraz znajduję, nie wiem z góry, gdzie to może być!Możesz zatrzymać się na dowolnym wzorze XHR, który uważam za bardzo użyteczny podczas debugowania tego rodzaju scenariuszy.
Na przykład podałem punkt przerwania dla wzorca adresu URL zawierającego „/”
źródło
Jeśli masz nieuczciwą pętlę, wstrzymaj kod w debuggerze Google Chrome (małe „
||
przycisk ” na karcie Źródła).Wróć do Chrome, otwórz „Menedżera zadań” ( Shift+ ESC), wybierz kartę, kliknij przycisk „Zakończ proces”.
Otrzymasz komunikat Snap Aww, a następnie możesz ponownie załadować ( F5).
Jak zauważyli inni, przeładowanie strony w momencie wstrzymania jest tym samym, co ponowne uruchomienie nieuczciwej pętli i może powodować nieprzyjemne zawieszanie się, jeśli debugger również się zablokuje (w niektórych przypadkach prowadzi do ponownego uruchomienia Chrome lub nawet komputera). Debuger potrzebuje przycisku „Stop”. Uwaga: Przyjęta odpowiedź jest nieaktualna, ponieważ niektóre jej aspekty są obecnie najwyraźniej błędne. Jeśli głosujesz na mnie, proszę wyjaśnij :) .
źródło
Otwórz kartę źródłową w „Narzędziach programisty”, kliknij numer wiersza w uruchomionym skrypcie, utworzy to punkt przerwania, a debugger tam się zepsuje.
źródło
Istnieje wiele odpowiednich rozwiązań tego problemu, jak wspomniano powyżej w tym poście, ale znalazłem mały hack, który można wstawić do skryptu lub wkleić w konsoli Chromes (debugger), aby go osiągnąć:
Spowoduje to, że wykonanie zostanie wstrzymane po trafieniu
F12
.źródło