Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.11.2019, 18:15
Аспирант
Отправить личное сообщение для Andrew K Посмотреть профиль Найти все сообщения от Andrew K
 
Регистрация: 15.11.2014
Сообщений: 40

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

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



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

Это случается уже второй раз. В первый раз для исправления ошибки я поставил свежую копию Реакта и залил файлы (не помогло), затем закомментировал код написанный за несколько дней (не помогло), потом закомментировал половину кода (не помогло). После закомментировал весь проект и тогда Отладчик стал работать ожидаемо. Три дня ушло на расскомментирование и проверки всех функций. После этого я написал еще немного кода и проблема появилась снова.
Ответить с цитированием
  #2 (permalink)  
Старый 24.11.2019, 18:49
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 945

Скорее всего тема останется без ответа
не все умеют гадать по фотографиям =).
Ответить с цитированием
  #3 (permalink)  
Старый 24.11.2019, 19:07
Аспирант
Отправить личное сообщение для Andrew K Посмотреть профиль Найти все сообщения от Andrew K
 
Регистрация: 15.11.2014
Сообщений: 40

Сообщение от MallSerg Посмотреть сообщение
Скорее всего тема останется без ответа
не все умеют гадать по фотографиям =).
Не все захотят читать 25 000 строк кода : )

Я не думаю что дело в коде. Отладчик в принципе не может работать так, как показано у меня. Если бы там была ошибка (а её нет), то отладчик как минимум бы остановился на ошибке. А он игнорируя вообще любой код останавливается на несколько строк ниже где он должен остановиться.
Ответить с цитированием
  #4 (permalink)  
Старый 24.11.2019, 19:09
Аспирант
Отправить личное сообщение для Andrew K Посмотреть профиль Найти все сообщения от Andrew K
 
Регистрация: 15.11.2014
Сообщений: 40

Как я писал такое поведение неожиданно появляется во всех функциях. Даже если закомментировать весь недавний код, то проблема останется.
Ответить с цитированием
  #5 (permalink)  
Старый 24.11.2019, 22:41
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,303

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

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

Я предполагаю, что в консоли не была напечатана «1», и должна быть подсвечена именно строка №45. Я думаю, что такое произошло из-за ошибки в source map. Возможно у вас раньше генерировались source map, а сейчас нет. Предполагаемое решение — удалите все сгенерированные сборщиком файлы и постройте их заново!
Ответить с цитированием
  #6 (permalink)  
Старый 25.11.2019, 00:09
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 945

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

А я гадаю что до отладчика дело даже не дошло и дебаггер тут совсем не причем в коде есть ошибки и движек не может скомпилировать текущую функцию (единицу трансляции).
И выполнение не на паузе стоит а Andrew K, перешел по клику на ошибку в консоли.
Ответить с цитированием
  #7 (permalink)  
Старый 25.11.2019, 00:45
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,303

Тоже возможно, MallSerg!
Ответить с цитированием
  #8 (permalink)  
Старый 25.11.2019, 06:24
Аспирант
Отправить личное сообщение для Andrew K Посмотреть профиль Найти все сообщения от Andrew K
 
Регистрация: 15.11.2014
Сообщений: 40

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

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

Сообщение от MallSerg
И выполнение не на паузе стоит а Andrew K, перешел по клику на ошибку в консоли
Ни куда не переходил. Так выглядит Отладчик при запуске страницы.

Сообщение от Malleys
Я думаю, что такое произошло из-за ошибки в source map. Возможно у вас раньше генерировались source map, а сейчас нет. Предполагаемое решение — удалите все сгенерированные сборщиком файлы и постройте их заново!
Спасибо за указание направления! Очень похоже что дело именно в этом. Попробую узнать как заново построить карты кода. Потом напишу результат.
Ответить с цитированием
  #9 (permalink)  
Старый 29.11.2019, 12:30
Аспирант
Отправить личное сообщение для Andrew K Посмотреть профиль Найти все сообщения от Andrew K
 
Регистрация: 15.11.2014
Сообщений: 40

Изначально проект был создан через 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. В этом случае будет похожее странное поведение Отладчика.

Большое спасибо Маллеусу за наводку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IE11 + скачивание файлов = странное поведение mrsergej Internet Explorer 4 02.12.2016 14:20
*ngIF странное поведение lakusha Angular.js 2 24.10.2016 19:13
Странное поведение jQuery borodatych Javascript под браузер 5 27.02.2014 10:47
Странное поведение переменной mycoding Серверные языки и технологии 4 14.01.2011 19:18
Странное поведение replace cooli0 Общие вопросы Javascript 4 25.01.2010 17:16