Доступ к исходной карте для отладки Closure Compiler?

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

После правильной настройки среды отладки, необходимой для этой задачи (исходный файл карты, хром, упаковка скомпилированного файла js), я наткнулся на проблемы с попыткой перехвата. Похоже, что широкое использование операторов try/catch в моей кодовой базе имело для меня неприятные последствия.

Почти во всех методах и функциях я использую типичный оператор try { } catch(e) {ss.error(e);}, где ss.error() — это общий обработчик ошибок, который в зависимости от среды либо выводит отладочный материал, либо сообщает. вернуть исключения...

В процессе сглаживания моей кодовой базы, когда я получаю ошибку, которую мне нужно исправить, происходит то, что вместо того, чтобы Chrome сообщал о проблемном файле и строке, он указывает на обработчик ошибок ss.error(). Таким образом, у меня не осталось возможности отследить проблему. Однако функция ss.error() печатает источник проблемы:

Ошибка! тип: TypeError at Db (/jsc/compiled.js:547:246) msg: Невозможно вызвать метод 'ka' из неопределенного источника:

После того, как я получаю такие ошибки, я должен сделать два шага: 1. Поиграться с скомпилированным кодом в строке 547 char 246 и попытаться выяснить, к какой части моего нескомпилированного кода это относится... 2. После того, как я найду его, удалите блоки try/catch, чтобы я мог напрямую и более четко увидеть, что вызвало ошибку...

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

Я думал каким-то образом использовать информацию Line:CharPosition для запроса исходной карты и заставить функцию ss.error() выполнять сопоставление с моим нескомпилированным исходным кодом...

идеи?


person thanpolas    schedule 20.05.2012    source источник
comment
Включаете ли вы ссылку на исходную карту внизу ваших скомпилированных js-файлов: //@ sourceMappingURL=src/scripts.source.map.js ? Вы ознакомились с Введением в исходные карты JavaScript?   -  person Christopher Peisert    schedule 21.05.2012
comment
Это не тот ответ, который вы ищете, но флаг отладки в сочетании с formatting=PRETTY_PRINT делает отладку намного проще, чем работу с исходными картами.   -  person Chad Killingsworth    schedule 21.05.2012
comment
Кроме того, это не то решение, которое вы ищете, но вы также можете настроить обработчик ошибок для захвата трассировки стека исключения.   -  person John    schedule 21.05.2012
comment
@ChadKillingsworth, это может помочь ...   -  person thanpolas    schedule 21.05.2012
comment
@John, я фиксирую трассировку стека, но это не очень помогает в скомпилированном коде...   -  person thanpolas    schedule 21.05.2012


Ответы (1)


Существует интерфейс Java для SourceMaps как часть компилятора замыкания. Существуют также реализации JS в различных состояниях ремонта. Я стараюсь обновлять ссылки на них здесь:

http://code.google.com/p/closure-compiler/wiki/SourceMaps

Для реализации Java вы просто загружаете исходную карту, используя SourceMapConsumerFactory, интерфейс довольно прост.

person John    schedule 22.05.2012