Почему мой отладчик визуально останавливается на неправильной линии?

Я использую

[email protected]
[email protected] 
[email protected] (64-bit)
macOS Sierra 10.12.5
[email protected]
[email protected]

В последнее время отладчик начал останавливаться на неправильных строках, но только визуально, в основном это похоже на 8-14 строк за фактической точкой останова.

например.

2Cirs.png

* оранжевая полоса указывает точку останова в Google Chrome

консольный вывод:

введите описание изображения здесь

Кроме того, как вы можете видеть, некоторые строки затемнены, что означает, что я не могу установить там точку останова в браузере.

Поведение во внутреннем отладчике WebStorm одинаково. Поэтому я думаю, что это не ошибка Chrome. Похоже, что исходное отображение нарушено. Я не знаю, является ли это WebStorm или Meteor. В этих условиях очень сложно отлаживать...

Ответ 1

Трудно сказать наверняка, но, похоже, проблема, с которой вы сталкиваетесь, связана с ошибкой, которая заставляет Meteor генерировать неверные исходные карты.

исходные карты

Это не ваша "ошибка" браузера. Он просто отображает код и позицию, которые доставляются ему исходными картами в вашем проекте.

Файл app.js и исходная карта (app.js.map) генерируются процессом сборки Meteor и обслуживаются из каталога .meteor/local/build/programs/web.browser/app.

В файле .map сообщается браузеру, как отображать исходный источник, и какие сегменты в сгенерированном файле app.js сопоставляются с какими сегментами исходного кода.

Отличное объяснение технических аспектов исходных карт можно найти здесь.

Вы можете визуализировать свои исходные карты онлайн и посмотреть, какие карты используют этот инструмент (выберите custom... и перетащите/снимите оба .js и .map.

подозрительная ошибка

Как часть процесса сборки, Meteor использует babel-compiler пакет Meteor. В какой-то момент ошибка привела к созданию недопустимых карт после преобразования Babel.

В настоящее время ошибка отслеживается на GitHub, и люди Meteor, похоже, закрывают причины.

что вы можете сделать?

В настоящее время нет быстрого и легкого исправления.

Вы можете:

  • Посмотрите на поток ошибок и дождитесь его разрешения и отладки без исходных карт (возможно, лучше всего, если ошибка будет исправлена ​​в ближайшее время).
  • Взломайте локальные клоны соответствующих пакетов Meteor (может работать, я не врывался в проблемы зависимостей и не рекомендую его, но здесь способ сделать это).
  • Выполнить Meteor из проверки git в известном хорошем состоянии до освобождения исправления.

Последний вариант - это @hwilson, чтобы начать выявлять ошибку через git bisect.

Вы можете обратиться к документу разработчика Meteor за подробной информацией о методе запуска метеорного инструмента из проверки, но суть вещей выглядит следующим образом:

Во-первых, убедитесь, что ваш код, включая .meteor/versions и .meteor/packages, проверен в исходном элементе управления, так как вам, вероятно, придется временно их испортить и захочет восстановить их после исправления ошибки.

  • git clone --recursive https://github.com/meteor/meteor.git в каталог по вашему выбору (например, /home/yourname/src/remote.
  • cd meteor.
  • git checkout 25a89b5, чтобы получить последнее известное хорошее сообщение.
  • git submodule update --init --recursive, чтобы убедиться, что все по-прежнему остается золотым после проверки.
  • ./meteor --help, чтобы запустить проверенную версию
  • В вашем проекте удалите информацию о версии из файла .meteor/packages, так как они, вероятно, будут несовместимы с теми, которые предлагаются в вашем оформлении.
  • В директории проекта запустите /home/yourname/src/remote/meteor/meteor run.

Это приведет к проверке версии Meteor. Возможно, вам понадобится сделать meteor reset (предупреждение: это очищает локальную базу данных mongo) или, по крайней мере, очистить некоторые из .meteor/local (например, исходные карты), чтобы это работало, но это может быть ненужным.

Это довольно много усилий для ошибки, которая, как я полагаю, будет решена в ближайшем будущем, но я решил частично включить эту информацию, чтобы ее можно было использовать в качестве документации для будущих проблем, связанных с sourcemap.

Ответ 2

Трудно сказать наверняка. В беглом поиске Google оказалось бы, что вы не единственный, кто это видит. Как упоминал @MasterAM, это, вероятно, из-за исходных карт из транспиляции. Я не думаю, что вы можете много сделать об этом, но вы можете попробовать очистить кеширование браузера и IDE, которые, похоже, сработали для некоторых.

Javascript Останавливает линию без точки останова в режиме удаленного отладки

Очистка кэша Webstorm

Ответ 3

Не уверен в этом сценарии, но столкнулся с аналогичной ситуацией при отладке java с помощью eclipse. Это происходит, когда исходный код и скомпилированный/интерпретируемый код, который отлаживается, различаются.

Попробуйте отладить простой js-код, чтобы проверить, есть ли что-то неправильно с самим отладчиком chrome js. Если это сработает, то объяснение строк кода, а не "debug-enabled", будет заключаться в том, что все они находятся в одной строке (до оператора, который регистрирует "7" ). Это может также привести к смещению номера строки в браузере.

Это одно из возможных объяснений.