Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   Странное поведение отладчика (https://javascript.ru/forum/library-toolkit-framework/78935-strannoe-povedenie-otladchika.html)

Andrew K 24.11.2019 18:15

Странное поведение отладчика
 
Добрый день. У меня вопрос про странное поведение Отладчика. Может кто-то сталкивался и уже понял причину. Будет здорово если поделитесь.

Дело в том, что Отладчик останавливается ниже строки где это ожидается. В прикрепленном снимке экрана видно, что в начале он должен остановиться на строке 45 где написана команда debugger;, а затем вернуть End... и завершить функцию. На деле Отладчик останавливается на строке 56 в if в который передан undefined. То есть этот код дважды недостижим.



Такое поведение распространяется не на одну функцию, а на все функции проекта (которые раньше работали верно). При этом это не ошибка Хрома: FF ведёт себя аналогично.

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

MallSerg 24.11.2019 18:49

Скорее всего тема останется без ответа
не все умеют гадать по фотографиям =).

Andrew K 24.11.2019 19:07

Цитата:

Сообщение от MallSerg (Сообщение 516094)
Скорее всего тема останется без ответа
не все умеют гадать по фотографиям =).

Не все захотят читать 25 000 строк кода : )

Я не думаю что дело в коде. Отладчик в принципе не может работать так, как показано у меня. Если бы там была ошибка (а её нет), то отладчик как минимум бы остановился на ошибке. А он игнорируя вообще любой код останавливается на несколько строк ниже где он должен остановиться.

Andrew K 24.11.2019 19:09

Как я писал такое поведение неожиданно появляется во всех функциях. Даже если закомментировать весь недавний код, то проблема останется.

Malleys 24.11.2019 22:41

MallSerg, у вас проблемы с распознаванием картинок?

Andrew K, MallSerg, там видно, что блок на строках №№53–56 не может вообще быть выполнен из-за условия. Но даже если undefined где-то переопределён (его можно переопределить!), то должно произойти исключение на строке №55, поскольку у null нет никаких свойств.

Я предполагаю, что в консоли не была напечатана «1», и должна быть подсвечена именно строка №45. Я думаю, что такое произошло из-за ошибки в source map. Возможно у вас раньше генерировались source map, а сейчас нет. Предполагаемое решение — удалите все сгенерированные сборщиком файлы и постройте их заново!

MallSerg 25.11.2019 00:09

>> Я предполагаю гадаю по фото =).

А я гадаю что до отладчика дело даже не дошло и дебаггер тут совсем не причем в коде есть ошибки и движек не может скомпилировать текущую функцию (единицу трансляции).
И выполнение не на паузе стоит а Andrew K, перешел по клику на ошибку в консоли.

Malleys 25.11.2019 00:45

Тоже возможно, MallSerg!

Andrew K 25.11.2019 06:24

Цитата:

Сообщение от Malleys
если undefined где-то переопределён

Не переопределён.

Цитата:

Сообщение от Malleys
Я предполагаю, что в консоли не была напечатана «1»

Не была напечатана.

Цитата:

Сообщение от MallSerg
И выполнение не на паузе стоит а Andrew K, перешел по клику на ошибку в консоли

Ни куда не переходил. Так выглядит Отладчик при запуске страницы.

Цитата:

Сообщение от Malleys
Я думаю, что такое произошло из-за ошибки в source map. Возможно у вас раньше генерировались source map, а сейчас нет. Предполагаемое решение — удалите все сгенерированные сборщиком файлы и постройте их заново!

Спасибо за указание направления! Очень похоже что дело именно в этом. Попробую узнать как заново построить карты кода. Потом напишу результат.

Andrew K 29.11.2019 12:30

Изначально проект был создан через create-react-app. Сейчас собрал через Вебпак. Выяснил, что для сборки карт кода без описанной ошибки свойство devtool (в файле настройки) нужно ставить в eval. Вроде этого:
module.exports = {
    mode: 'development',

    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: [
                    { loader: 'babel-loader' },
                    {
                        loader: 'source-map-loader',
                        options: { enforce: "pre" }
                    }
                ]
            }
        ]
    },

    devtool: 'eval',
}


В create-react-app этот параметр установлен в source-map. В этом случае будет похожее странное поведение Отладчика.

Большое спасибо Маллеусу за наводку.


Часовой пояс GMT +3, время: 10:50.