Да простят меня фанаты норвежского браузера, Opera нельзя назвать популярным. Да и хлопот от него не меньше, чем от IE например. "У общества без цветовой дифференциации штанов нет будущего", тут не поспоришь, но не до такой же степени. Короче сказ о том, как я искал баг в клиентском скрипте.
Фабула. От клиентов одного сервиса иногда поступали жалобы на некорректную работу этого самого сервиса. Воспроизвести ошибку мне не удавалось, да и честно говоря есть чем заняться :). И вот на днях ребята из техподдержки выяснили (путем допроса с пристрастием недовольных клиентов - прим. переводчика), что баг проявляет себя в опере. Открываю оперу, тестирую - действительно, теперь не отвертишься...
Вычислить в каком месте кода косяк - дело техники, речь не об этом. Гораздо любопытнее суть косяка.
Для создания условий максимально приближенных к боевым предлагаю вот такой код:
Открываем страницу в Chrome, переходим в консоль (Ctrl+Shift+I), обращаем внимание на дату.
Открываем ту же самую страницу в Opera, переходим в консоль (Ctrl+Shift+I), по идее дата должна совпадать.
Вот он этот коварный тип гражданской наружности :).
В реальных условиях процесс вычисления бага "гораздо интереснее": расставляем бряки и по ходу выполнения кода проверяем значения переменных. Для этого:
- в окне Chrome DevTools переходим на вкладку Sources:
- в окне Opera Dragonfly переходим на вкладку Скрипты:
А теперь внимание, вопрос: а где же бага? На первый взгляд все ровно. Кто не догадался - обратите внимание на комментарии в коде.
Мораль. Сказано в писании: глава 15 стих 1.2.2 - parseInt (string , radix). Опциональных аргументов нет - не поленись, добавь основание: parseInt(arr[1], 10).
p.s. Заголовок поста - резюме программиста, который работает за соседним столом - Дима, привет :) !
Фабула. От клиентов одного сервиса иногда поступали жалобы на некорректную работу этого самого сервиса. Воспроизвести ошибку мне не удавалось, да и честно говоря есть чем заняться :). И вот на днях ребята из техподдержки выяснили (путем допроса с пристрастием недовольных клиентов - прим. переводчика), что баг проявляет себя в опере. Открываю оперу, тестирую - действительно, теперь не отвертишься...
Вычислить в каком месте кода косяк - дело техники, речь не об этом. Гораздо любопытнее суть косяка.
Для создания условий максимально приближенных к боевым предлагаю вот такой код:
<script> // здесь прилетает строка, которую нужно разбить в массив var arr = '2013-08-10'.split('-'); // как известно в JavaScript нумерация месяцев даты начинается с 0, // поэтому далее необходимо из arr[1] вычесть 1 // честно говоря когда писал этот код сразу написал arr[1] -= 1 - отработало как надо, // но в реальном коде было приблизительно так: arr[1] = parseInt(arr[1]) - 1; // собираем дату var dt = new Date(arr[0], arr[1], arr[2]); // далее продолжение кода console.log(dt); // лирическое отступление для наглядности </script>
Открываем страницу в Chrome, переходим в консоль (Ctrl+Shift+I), обращаем внимание на дату.
Открываем ту же самую страницу в Opera, переходим в консоль (Ctrl+Shift+I), по идее дата должна совпадать.
Вот он этот коварный тип гражданской наружности :).
В реальных условиях процесс вычисления бага "гораздо интереснее": расставляем бряки и по ходу выполнения кода проверяем значения переменных. Для этого:
- в окне Chrome DevTools переходим на вкладку Sources:
- в окне Opera Dragonfly переходим на вкладку Скрипты:
А теперь внимание, вопрос: а где же бага? На первый взгляд все ровно. Кто не догадался - обратите внимание на комментарии в коде.
Мораль. Сказано в писании: глава 15 стих 1.2.2 - parseInt (string , radix). Опциональных аргументов нет - не поленись, добавь основание: parseInt(arr[1], 10).
p.s. Заголовок поста - резюме программиста, который работает за соседним столом - Дима, привет :) !
Комментариев нет:
Отправить комментарий
Комментарий будет опубликован после модерации