Jako produkt uboczny optymalizacji kodu wykonywanej przez nowoczesne przeglądarki, podczas debugowania nie można „zobaczyć” wszystkich zmiennych, które „faktycznie” są w zakresie. Jest to dobrze znane i zostało poruszone w poprzednim pytaniu tutaj na SO . Ta funkcja, choć z pewnością przydatna w produkcji, bardzo mnie denerwuje podczas opracowywania, ale spowalnia mnie (to powinno być oczywiste).
Teraz moje pytanie brzmi: czy jest jakiś sposób, aby wyłączyć to zachowanie? Czy mogę edytować jakiś plik konfiguracyjny, czy jest wtyczka do przeglądarki, czy może jest „specjalna wersja kompilacji dla programistów” pliku wykonywalnego przeglądarki? Uwielbiam pisać mój kod w konsoli od razu, gdy piszę nowy kod, więc to mnie naprawdę wkurza.
AKTUALIZACJA / EDYCJA
Oto częściowe rozwiązanie, podziękowania dla Paul1365972.
Musisz uruchomić przeglądarkę chrome z wiersza poleceń, ze specjalnymi opcjami, takimi jak:
- Zamknij całkowicie Chrome
- Uruchom Chrome z konsoli z
"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"
podobnym systemem Windows. - Otwórz konsolę programisty i uruchom
"%GetHeapUsage()"
. Jeśli poprawnie uruchomiłeś Chrome z tą opcją, pewna liczba zostanie zalogowana do konsoli, w przeciwnym razie pojawi się błąd składniowy.
Za pomocą tej flagi wiersza poleceń można „rozmawiać z silnikiem V8” za pomocą poleceń rozpoczynających się od %
, które są błędami składniowymi w zwykłym JavaScript. Lista dostępnych poleceń V8 tego rodzaju została podana w odpowiedzi Paula .
Na %NeverOptimizeFunction()
tej liście jest coś, co wyglądało na coś, co musiałbym po prostu zadzwonić i skończyć z tym. Niestety, funkcja ta nie spełnia moich oczekiwań, jak pokazano na następnym zrzucie ekranu.
((( Drugi link z odpowiedzi Paula (moduł węzła v8-natives)) nie ma dla nas tutaj znaczenia w tym kontekście. Wszystko, co robi, to owija linijki wokół wywołań funkcji „%”, aby kod się nie zawiesił przeglądarki, które nie są wer. 8)))
(((Pamiętam czas, kiedy to działało (kiedy ta optymalizacja nie została jeszcze wynaleziona / wdrożona). Nie wiem, jak dawno temu. Dziesięć lat? 15 lat? Coś w tym rodzaju. Jaka była ostatnia wersja Chrome (jeśli jakikolwiek) i jaka była ostatnia wersja Firefoksa (bardziej pewna, że istnieje), gdzie możesz to zrobić? Nie dostaniesz nagrody, ale dostaniesz opinię, jeśli zdołasz ją poznać i opublikować jako odpowiedź .)))
ROZWIĄZANIE
DZIĘKUJĘ PETR SRNICEK
NOWE PYTANIE
Chociaż rozwiązanie Petra bardzo pomaga, nie jest idealne. To pytanie staje się zbyt długie, więc opublikowałem nowe pytanie, w jaki sposób można ulepszyć rozwiązanie Petra. (Mógłbym oczywiście edytować to pytanie tutaj, ale byłoby to „niehistoryczne”, jeśli wiesz, co mam na myśli).
v8-natives
Biblioteka właśnie owija ważnych% połączeń w kodzie w prosty biblioteki, które powinny być noops
w przeglądarce lub węzła, który nie został uruchomiony specjalny flagą --allow-tubylcy-składni ..
%NeverOptimizeFunction(foo)
że właśnie nazwałem to dla bodyOnload, „tylko dlatego, że”, myśląc „no cóż, nie będzie bolało”. Problem polega na tym, że foo
NIE jest on dezoptymalizowany w sposób, na jaki liczyłem. Zmienna lorem
jest niewidoczna. Powiedzmy, że chcę napisać kod, który ma przejść do funkcji foo. Zamiast wpisywać go w moim edytorze tekstu, piszę go w konsoli programisty (podczas gdy debugger siedzi w foo), sprawdzam, czy robi to, co chcę, a następnie kopiuję / wklejam go z konsoli do mojego edytora tekstu. Tak uwielbiam pracować. I nie mogę. Z powodu optymalizacji. Zdobyć?
--js-flags
(w tym kilkoma związanymi z TurboFan ), a także z kilkoma natywnymi poleceniami V8, zanim Paul1365972 opublikował swoją odpowiedź, ale nie byłem w stanie osiągnąć pożądanego zachowania. Uważam, że takie podejście może być ślepym zaułkiem. Warto dodać [v8]
tag do tego pytania. Ktoś, kto dogłębnie rozumie wewnętrzne funkcjonowanie V8, może wyjaśnić, czy to jest właściwa droga, czy może skieruje cię we właściwym kierunku.