Отлавливать ошибки JavaScript из сжатых файлов

Я ловлю ошибки JS, подписываясь на событие window.onerror, поэтому, если кто-то ловит ошибку «неопределенная переменная», я отправляю ее на сервер для целей отладки. Как вы знаете, это событие возвращает «сообщение об ошибке», «url» и «строку», где произошла ошибка.

Проблема в сжатых файлах.

Если файл сжат, весь код умещается в одну строку и определить точное место ошибки большая проблема.

Есть ли решение этой проблемы?


person Denis    schedule 15.09.2014    source источник


Ответы (4)


Компрессоры JavaScript обычно делают две вещи:

  1. Удалите все ненужные пробелы («ненужные» с точки зрения синтаксической проверки).
  2. сокращайте имена переменных, если это возможно. Это относится к локальным переменным, то есть к тем, которые не входят в глобальную область видимости или являются членами объекта.

Есть и другие оптимизации, такие как встраивание функций, но обычно они не столь проблематичны.

Что касается первого пункта, вы можете запустить код через один из многих форматировщиков исходного кода JavaScript. . Это должно дать вам довольно читаемый файл JavaScript.

Что касается второго пункта, то обфускация обычно необратима. Если «говорящие» имена переменных, такие как width, height или какие-либо другие, были изменены на a или b, вы не можете знать, что они должны были выражать в первую очередь.

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

Если это закрытый исходный код, и только «украшание» кода не помогает, вы должны написать отчет об ошибке поставщику.

person lxg    schedule 15.09.2014

Нет. Невозможно «разминировать» включение JavaScript для целей регистрации ошибок.

Лучше всего, вероятно, занести в журнал тип ошибки в надежде, что это поможет вам отладить проблему.

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

person Dave    schedule 15.09.2014

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

http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/

person Tiago Coelho    schedule 15.09.2014

Лучший ответ на этот вопрос я нашел здесь

Малив предлагает использовать Uglify с параметром max-line-len и исходными картами.< br> Вероятно, это лучшее решение для определения точного места в коде.

person Denis    schedule 01.03.2015