Отладчик показывает неверную информацию с исходными картами

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

Пример:

if(something === 1){
    console.log("it's something"); // debugger thinks the VM is here
else{
    console.log("no it's not");    // while actually it's here
}

Затем это напечатало no it's not, хотя отладчик прыгнул в if

Другой пример, который я испытал, был:

var that = this;
some.functionCall(1, function(){
    console.log(that);  //this is where the debugger thinks the vm is
    // debugger: that = undefined
    // console prints nothing to that point
});

Когда я продолжил программу, console.log(that) в конце концов загорелся.

Кто-нибудь еще сталкивался с такой же проблемой? Это скорее проблема UglifyJS2 или Google Chrome?

Версия Chrome: 38.0.2125.8 для разработчиков (64-разрядная версия)
Uglify2JS: 2.4.0
grunt-contrib-uglify: 0.5.1


person rob    schedule 23.08.2014    source источник


Ответы (1)


Наблюдаю похожую проблему. Смещение точно равно количеству строк комментария.

EDIT Основной причиной стали строки с префиксом //>>, которые встречались в сторонних библиотеках. Каждая такая строка делает смещение на 1 строку. Они кажутся устаревшими прагмами сборки requirejs.

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

sed -i -e 's_//>>_// pragma was here: _g' `find . -type f -name "*.js"`
person Alek Kowalczyk    schedule 08.11.2014
comment
Вопрос в том, проблема ли это в хроме или в uglifyjs... будем исследовать это дальше - person rob; 11.11.2014