Як побічний продукт оптимізації коду, який здійснюють сучасні браузери, під час налагодження ви не можете "побачити" всі змінні, які "фактично" знаходяться в області застосування. Це добре відомо, і це було розглянуто в попередньому запитанні тут . Ця особливість, хоча, звичайно, корисна у виробництві, мене дуже дратує під час розвитку, але вона уповільнює мене (це повинно бути очевидно.)
Тепер моє запитання: чи є спосіб вимкнути цю поведінку? Чи можу я відредагувати якийсь файл конфігурації, чи є плагін браузера, чи, можливо, є "спеціальна версія для розробників" для виконуваного браузера? Я люблю вводити свій код в консоль відразу, коли я пишу новий код, тому це насправді клопоче мене.
ОНОВЛЕННЯ / редагування
Ось часткове рішення, кредит на Paul1365972.
Потрібно запустити браузер Chrome з командного рядка зі спеціальними параметрами, як-от так:
- Закрийте Chrome повністю
- Запустіть Chrome з консолі,
"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"
що є для Windows інших подібних ОС. - Відкрити консоль розробника та виконати
"%GetHeapUsage()"
. Якщо ви правильно запустили Chrome із цим параметром, на консоль буде записано номер, інакше ви отримаєте синтаксичну помилку.
За допомогою цього прапора командного рядка ви можете «спілкуватися з двигуном V8» командами, починаючи з %
яких є синтаксичними помилками в простому JavaScript. Список доступних команд V8 подібного роду був наведений у відповіді Павла .
Є %NeverOptimizeFunction()
в цьому списку, який є чимось схожим на те, що я просто повинен був би зателефонувати і зробити це з ним. На жаль, ця функція не робить те, на що я сподівався, як показано на наступному екрані.
((( Інше посилання з відповіді Павла (модуль вузлів v8-natives) для нас тут не має великого значення в цьому контексті. Все, що він робить, це обертає однокласники навколо викликів функції "%", щоб код не вийшов з ладу браузери, які не є v8.)))
((Я пам’ятаю час, коли це спрацьовувало (коли ця оптимізація ще не була придумана / впроваджена). Не знаю, як давно. Десять років? 15 років? Щось подібне. Якою була остання версія Chrome (якщо будь-яка) і яка була остання версія Firefox (більш впевненою, що вона існує), де ви могли б це зробити? Це не отримає вам винагороду, але ви отримаєте нагороду, якщо ви дізнаєтесь і опублікуєте це як відповідь .)))
РІШЕННЯ
ДЯКУЮ ПЕТР СРНИЧЕК
НОВЕ ЗАПИТАННЯ
Хоча рішення Петра дуже допомагає, воно не є ідеальним. Це питання стає занадто довгим, тому я розмістив нове запитання про те, як можна поліпшити рішення Петра. (Я, звичайно, міг би відредагувати це питання тут, але це було б "неісторично", якщо ви знаєте, що я маю на увазі.)
v8-natives
Бібліотека просто обертає важливі% викликів в коді в простих бібліотеках , які повинні бути noops
в браузері або вузлі , який не був запущений в спеціальному прапорі --allow-тубільці-синтаксичного ..
%NeverOptimizeFunction(foo)
я просто назвав його також для bodyOnload, "просто тому, що", думаючи "добре, це не зашкодить". Проблема полягає в тому, що foo
НЕ деоптимізується так, як я сподівався. Змінна lorem
невидима. Скажімо, я хочу написати якийсь код, який повинен перейти у функцію foo. Замість того, щоб вводити його у свій текстовий редактор, я набираю його в консоль розробника (поки налагоджувач сидить в колонтитулі), бачу, чи він робить те, що я хочу, а потім копіюю / вставляю його з консолі до мого текстового редактора. Ось так я люблю працювати. І не може. Через оптимізацію. Отримаєте?
--js-flags
(включаючи кілька пов'язаних з TurboFan ), а також з декількома нативними командами V8 до того, як Paul1365972 опублікував свою відповідь, але мені не вдалося досягти бажаної поведінки. Я вважаю, що такий підхід може бути тупиком. Можливо, варто додати [v8]
тег до цього питання. Хтось із глибоким розумінням внутрішніх функцій V8, можливо, зможе уточнити, чи це шлях, чи, можливо, вказати на вас у правильному напрямку.