|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
Юзер тащит кусок пазла из n кусочков (массив sel_group) этот массив кешируется в old_group Дальше после отпускания группы, она может слипнуться с другой группой кусков(т.е. в sel_group добавятся еще куски из присоединенной группы) и код for (i = 0; i < sel_group.length; i++) sel_group[i].checked = false; // mark dropped pieces for (i = 0; i < old_group.length; i++) sel_group[i].checked = true; Цитата:
Вообщем еще раз повторяю этот код выполняется от начала и до конца т.к. последняя строка Не зависит ни от каких условий и исполняется, значит и все что выше тоже исполняется без косяков. Цитата:
|
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Да нет тут ничего загадочного. Ошибка в первой же строке функции, когда e===null. Скорее всего, метод где-то явно вызывается (может даже и в кадре) передавая null. Хотя и через всякие onMU.bind(null, [null]) в качестве слушателя тоже можно добиться подобного.
Вывод Цитата:
В пользу версии говорит и улика в виде загадочного Загадочный if потому, что в этой строчке e уже точно не null. Ведь в начале метода идет доступ к e.target. И этот доступ падает с ошибкой в слуае e===null (что мы собственно и наблюдаем в рассматриваемой ситуации). Зато улика говорит нам, что раз есть проверка, значит автор кода явно подозревал наличие вызова onMU(null), а может, и сам написал этот вызов. Всё сходится. Где-то есть вызов onMU(null), который и дает ошибку в логе. Лог успешного выполнения ни при чем и демонстрирует успешное выполнение функции при e!==null. |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
Цитата:
|
|
|||||
Что будет если вызов этого метода обернуть в try / catch?
Если поймает исключение, можно будет посмотреть весь стек вызовов и проверить каждый объект null. Второй вариант - расставь по всему методу, на каждой строчке брейкпоинты и отследи вызов каждой строчки до того момента, как вылетит этот баг. Вообще, не знаю как получилось, что ты так долго в одном методе ищешь ошибку. Есть же отладчики / профайлеры. Я бы понял, если бы баг происходил где-то в непонятном месте во всем приложении. Но тут он локализован до одного метода. Поиск сводится к простым "брякам"
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
Цитата:
Цитата:
Цитата:
|
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Цитата:
Если я с синтаксисом не напутал, то конструкция называется вызов метода.Она вызывает метод. В аргументах там передается литерал массива (array literal), он создает массив . Семантика метода bind - частичное применение функции (partial application), в данном случае применение к одному аргументу null. Данный вызов bind вернет функцию, которая при вызове будет вызывать onMU(null). |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
Добавлено через 7 минут хотя да,надо добавить логов |
|
|||||
Кстати, вот только что пришло в голову. У меня как-то раз, по неопытности, вылетал почти такой же странный баг, который я долго не мог отловить. Так же вылетало обращение к свойству null, хотя проверки показывали, что в методе все ок.
Как потом оказалось, дело было в том, что ошибка вылетала в экземпляре, который уже был удален, но не достаточно хорошо зачищен от ссылок. Он продолжал существовать в памяти и работать. Но так как часть ссылок там была null, это и вызывало сбои. Что у тебя это за класс? Уж не создается ли он случаем при каждом новом уровне? И если создается, как ты его зачищаешь от ссылок?
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
действительно, стектрейс вылетает где-то до первой записи в лог.Всем спасибо, пойду копать.
|
Часовой пояс GMT +4, время: 20:47. |
|
« Предыдущая тема | Следующая тема » |
|
|