SlideShare a Scribd company logo
Алексей Андросов - Debugger: Отладка кода
Debugger
Алексей  Андросов
Старший  разработчик  интерфейсов
Школа  разработки  интерфейсов,  Яндекс,
2013  год
Баги  –  это
нормально
Баги  –  это  нормально
●    Человеку  свойственно  ошибаться.
●    Браузер  –  неконтроллируемая  среда  для  исполнения  вашего
  кода.
●    Нестабильное  сетевое  соединение.

●    Дефграгменация  рынка  браузеров.


  Если  вы  меряете  эффективность  своей  работы  по  количеству
  багов,  поздравляю,  у  вас  серьёзные  проблемы.

  04
Первое  правило:
вы  —  дурак,
а  все  вокруг  —
Д'Артаньяны
Второе  правило:
ошибка  не  в  вашем
коде,  а  в  коде
вашей  команды
С  чего  начать?
1.  Выдохните,  расслабьтесь,  выпейте  чаю
2.  Локализовать  проблему  в  рамках  фронтед-­бекенд




  07
Что  у  нас
есть  в
арсенале?
alert()  –
наше  всё!  
Какие  еще  дедовские  способы
  есть?
●    Красить  DOM-­ноды  с  помощью   background:red   или

  border: 1px solid #F00
●    Метод  «половинчатого  деления  кода»




  10
Метод  «половинчатого
  деления  кода»  поможет:
●    здесь:   var obj = {a: 1, b: 2 , }; ,
●    и  здесь:   (function(){})() (function(){})() ,
●    и  при  падении  браузера.


  Но  пацаны  с  раёна  говорят,  что  правильно  использовать
  статический  анализ  кода  и  git-­bisect  



  11
Современные
средства
отладки
WebKit  Web  Inspector
Firefox  +  Firebug
Firefox  +  Web  Developer  Tools
IE  Developer  Tools  (IE  >=  8)
IE  <  8
●    IE  Developer  Toolbar/IE7
●    DebugBar

●    Companion.JS
●    MS  Visual  Studio
●    Script  Debugger
●    …




   17
Opera  Dragonfly
Что  можно  с  ними  делать?
●    HTML/CSS:  просмотр  DOM-­дерева,  редактирование  стилей
●    JavaScript:  отладка,  профилирование
●    Процесс  загрузки  страницы
●    и  не  только  это…




  19
Net-­panel
Процесс  загрузки
Подробная  информация  о  запросе
Отладка
JavaScript
Debugger
Отладка  –  это  построчное  выполнение  кода  с  просмотром
текущего  состояния.  Это  самый  точный  способ  увидеть  проблему.


Но  это  не  витальный  ответ  на  все  проблемы.  К  примеру,  сложно
работать  с  нелинейным  кодом  с  асинхронными  вызовами.  А  ещё

отладка  останавливает  выполнение  кода,  и  асинхронные  запросы
(например,  ajax)  могут  потерятся.



24
Как  остановить?
●    ключевое  слово   debugger   в  коде




●    


●    



    25
Как  остановить  по  условию?

●    


●    




    26
Кто  изменяет  DOM-­дерево?




●    




    27
Алексей Андросов - Debugger: Отладка кода
Кнопки  управления



1.  Resume:  продолжить  выполнение
2.  Step  over:  перейти  в  к  следующему  выражению
3.  Step  into:  зайти  внутрь  функции
4.  Step  out:  выйти  из  функции



  29
Console
Console
Логирование  –  это  вывод  в  консоль  браузера  полезной
информации  в  процессе  исполнения  кода.


Можно  выводить  абсолютно  всё:  собственные  сообщения,
переменные,  DOM-­ноды  и  т.п.




31
console.log()  /  info()  /  warn()  /
      error()
01. console.log('console.log');
02. console.warn('console.warn');
03. console.info('console.info');

04. console.error('console.error');
05. console.group('console.group');
06.        console.log('msg1');
07. console.groupEnd('console.group');
      32
console.log()  /  info()  /  warn()  /  error()
console.log()  и  передача
      значений  по  ссылке
01. function doSmth(obj) {

02.        console.log(obj);
03.        obj.prop = 2;
04. }
05. doSmth({
06.        prop: 1
07. });
      34
console.log()  и  передача
  аргументов  по  ссылке
●    В  Firefox  поможет  console.dir()
●      В  остальных  браузерах  придется  копировать  объекты:
   ●    console.log(  JSON.parse(JSON.stringify(myObj))  )
   ●    console.log(  [].concat(arr)  )
   ●    console.log(  node.cloneNode(true)  )




  35
Что  еще  есть?
●    Вывод  стека  выполнения  до  текущего  момента:  console.trace()
●    Замер  времени  исполнения:  console.time('myFunc')  /
   console.timeEnd('myFunc')
●    Профилирование:  console.profile('myFunc')  /
   console.profileEnd('myFunc')

●    …




   36
Как
отслеживать
события?
Chrome
Firefox
Firefox  +  Firebug  +  EventBug
Firefox  +  Firebug  +  Firequery
А  как
отлаживаться
в
продакшене?
window.onerror
01. window.onerror = function(msg, url, line) {
02.        new Image().src = '/log?type=jserror' +
03.           '&msg=' + encodeURIComponent(msg) +
04.           '&url=' + encodeURIComponent(url) +
05.           '&line=' + encodeURIComponent(line);
06. }




      43
Главная  проблема
    window.onerror


“
    If  the  location  URL  does  not  have  a  same  origin  as  the  origin,  then  set
    message  to  "Script  error.",  set  location  to  the  empty  string,  and  set
    line  to  0.
         http://dev.w3.org/html5/spec/webappapis.html#report-­the-­error




    44
Главная  проблема
window.onerror
Можно  обойти  в  Firefox:


<script src="…" crossorigin="anonymous"></script>
А  сервер  должен  ответить  CORS-­заголовком
Access-­Control-­Allow-­Origin:  *




45
Логирование  неожиданного
      поведения
01. if (allGoesWell) {

02.        // все хорошо
03. } else {
04.        new Image().src = '/log?type=something_went_wrong' +
05.           '&some_usefull_data=' + encodeURIComponent(data)
06. }


      46
Логирование  исключений
01. try {
02.        // все хорошо
03. } сatch (e) {
04.        var msg = e.message || e.toString();
05.        new Image().src = '/log?type=exception' +
06.           '&msg=' + encodeURIComponent(msg)
07.           '&stack=' + encodeURIComponent(e.stack)

08. }
      47
Транспорты  и  долговисящие
  соединения
  Их  можно  отлаживать  с  помощью  скрытой  консоли,  доступной  по
  хоткею.


●    Всегда  можно  посмотреть  все  события

●    Можно  отправлять  весь  лог  на  анализ




  48
Статический
анализ  кода
Статический  анализ  HTML
●    validator.w3.org
●    over  9000  плагинов  для  браузеров  и  редакторов

●    tidy  из  консоли  или  API  validator.w3.org




  50
Статический  анализ  CSS
●    jigsaw.w3.org/css-­validator/
●    over  9000  плагинов  для  браузеров  и  редакторов
●    CSSLint  из  консоли  или  API  jigsaw.w3.org/css-­validator/


  Но,  честно  говоря,  CSSLint  не  очень




  51
Статический  анализ  JS
●    JSLint  и  его  форк  JSHint
●    over  9000  плагинов  для  браузеров  и  редакторов  (отличные
  инспекции  JS  в  WebStorm)
●    jshint.com,  jslint.com




  52
Статический  анализ  JS
   Поможет  найти  синтаксические  ошибки  и  возможные  логические
   ошибки


01. if (myVar = 'someValue')


01. if (myVar & anotherVar)




   53
Полезные
советы
Сохранение  объекта  для
      последующего  исследования
01. if (DEBUG_MODE) {
02.        window.objToWatch = myHiddenObject;
03. }



      После  этого  можно  из  консоли  иметь  доступ  к  объекту.




      55
Исследование  внешних
      библиотек
01. var _LibSomeFunc = Lib.someFunc
02. Lib.someFunc = function() {
03.        console.log('Lib.someFunc wrapper', arguments);

04.        _LibSomeFunc.apply(this, arguments)
05. }




      56
Форматирование  кода  (Chrome,  Opera)
Алексей Андросов - Debugger: Отладка кода
Debugger
Алексей  Андросов
Старший  разработчик  интерфейсов

Школа  разработки  интерфейсов,  Яндекс,
2013  год

More Related Content

PDF
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
PDF
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
PDF
Многопоточность в браузере. Модель акторов — Константин Крамлих
PPTX
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
PPTX
Bytecode
PPTX
Windows Azure and node js
PDF
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
PDF
Инструментируй это
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Многопоточность в браузере. Модель акторов — Константин Крамлих
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
Bytecode
Windows Azure and node js
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Инструментируй это

What's hot (20)

PDF
практические советы по улучшению качества кода
PPTX
course js day 1
PDF
Шишки, набитые за 15 лет использования акторов в C++
PDF
Очередной скучный доклад про логгирование
PDF
C++ refelection and cats
PDF
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
PPTX
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
PPTX
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
PPT
Юнит-тестирование и Google Mock. Влад Лосев, Google
PPTX
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
ODP
Как за час сделать недельную работу
PPTX
PDF
Kranonit s16 (python). dmitry furzenko
PDF
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
PDF
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
PDF
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
PPTX
Asynchrony and coroutines
PDF
МРТ для данных, Frontend Conf 2016
PDF
Внутреннее устройство и оптимизация бандла webpack
PPTX
Аскетичная разработка браузера
практические советы по улучшению качества кода
course js day 1
Шишки, набитые за 15 лет использования акторов в C++
Очередной скучный доклад про логгирование
C++ refelection and cats
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Юнит-тестирование и Google Mock. Влад Лосев, Google
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Как за час сделать недельную работу
Kranonit s16 (python). dmitry furzenko
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
Asynchrony and coroutines
МРТ для данных, Frontend Conf 2016
Внутреннее устройство и оптимизация бандла webpack
Аскетичная разработка браузера
Ad

Viewers also liked (9)

PDF
Общий цикл разработки
PDF
Сага_о_клиентах_из_поиска
PDF
Елена Джетпыспаева "Яндекс.Events?!"
PDF
"OpenStack — more than just software". Tom Fifield, OpenStack
PDF
Михаил Щербаков - Нестандартное использование Puppet в деплойменте
PDF
Регина Барзилай "Извлечение информации из социальных медиа"
PDF
Gareth Jones 1209
PDF
Сергей Терехов — Активное обучение при малой доле примеров с известными ответами
PDF
О.В.Сухорослов "MapReduce"
Общий цикл разработки
Сага_о_клиентах_из_поиска
Елена Джетпыспаева "Яндекс.Events?!"
"OpenStack — more than just software". Tom Fifield, OpenStack
Михаил Щербаков - Нестандартное использование Puppet в деплойменте
Регина Барзилай "Извлечение информации из социальных медиа"
Gareth Jones 1209
Сергей Терехов — Активное обучение при малой доле примеров с известными ответами
О.В.Сухорослов "MapReduce"
Ad

Similar to Алексей Андросов - Debugger: Отладка кода (20)

PPT
Подробная презентация JavaScript 6 в 1
PDF
Отладка веб-приложений на Javascript
PPTX
CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? М...
PPT
Подробная презентация JavaScript 6 в 1
PPT
Отладка и профилирование JavaScript/Ajax
PPTX
Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''
PPT
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
PDF
YaC 2013 Notes
PPTX
Node.js введение в технологию, КПИ #ITmeetingKPI
PDF
Дмитрий Щадей "Зачем и как мы используем jsLint"
PDF
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
PDF
JavaScript сегодня: React, Redux и новая реальность
PDF
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
PDF
webpack: 7 бед - один ответ
PPTX
course js day 2
PDF
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
PDF
D2D Pizza JS Илья Беда "Куда мы все катимся?"
PPTX
Построение собственного JS SDK — зачем и как?
PDF
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
Подробная презентация JavaScript 6 в 1
Отладка веб-приложений на Javascript
CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? М...
Подробная презентация JavaScript 6 в 1
Отладка и профилирование JavaScript/Ajax
Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
YaC 2013 Notes
Node.js введение в технологию, КПИ #ITmeetingKPI
Дмитрий Щадей "Зачем и как мы используем jsLint"
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
webpack: 7 бед - один ответ
course js day 2
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Построение собственного JS SDK — зачем и как?
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...

More from Yandex (20)

PDF
Предсказание оттока игроков из World of Tanks
PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Предсказание оттока игроков из World of Tanks
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...

Алексей Андросов - Debugger: Отладка кода