Skip to content

Commit

Permalink
resolve comments from iliakan.
Browse files Browse the repository at this point in the history
  • Loading branch information
pimonenkov committed May 5, 2019
1 parent 520dcc3 commit 05a7526
Showing 1 changed file with 27 additions and 27 deletions.
54 changes: 27 additions & 27 deletions 1-js/03-code-quality/01-debugging-chrome/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@

## Панель "Исходный код" ("Sources")

Версия Chrome, установленная на вашем устройстве, может выглядеть немного иначе, однако принципиальных отличий не будет.
Версия Chrome, установленная у вас, может выглядеть немного иначе, однако принципиальных отличий не будет.

- Работая в Chrome, откройте [тестовую страницу](debugging/index.html).
- Включите инструменты разработчика, нажав `F12` (Mac: `Cmd+Opt+I`).
- Включите инструменты разработчика, нажав `key:F12` (Mac: `key:Cmd+Opt+I`).
- Щёлкните по панели `sources` ("исходный код").

При первом запуске получаем следующее:

![](chrome-open-sources.png)

Чтобы просмотреть файлы приложения, щёлкните по переключателю <span class="devtools" style="background-position:-168px -76px"></span>:
Чтобы открыть вкладку с файлами, щёлкните по переключателю <span class="devtools" style="background-position:-168px -76px"></span>:

В списке видим файлы `index.html` и `hello.js`. Выберем последний:

Expand All @@ -27,14 +27,14 @@
Интерфейс состоит из трёх зон:

1. В зоне **Resources** (Ресурсы) показаны файлы HTML, JavaScript, CSS, включая изображения, используемые на странице. Здесь также могут быть файлы различных расширений Chrome.
2. Зона **Source** отображает текст исходного кода.
2. Зона **Source** показывает исходный код.
3. Наконец, зона **Information and control** (Сведения и контроль) отведена для отладки, вскоре мы к ней вернёмся.

Чтобы скрыть список ресурсов и освободить экранное место для исходного кода, щёлкните по тому же переключателю <span class="devtools" style="background-position:-200px -76px"></span>.

## Консоль

По нажатию на клавишу `Esc` в нижней части экрана вызывается консоль, где можно вводить команды и выполнять их клавишей `Enter`.
При нажатии на клавишу `key:Esc` в нижней части экрана вызывается консоль, где можно вводить команды и выполнять их клавишей `key:Enter`.

Результат выполнения инструкций сразу же отображается в консоли.

Expand All @@ -54,16 +54,16 @@

*Точка останова* – это участок кода, где отладчик автоматически приостановит исполнение JavaScript.

Пока исполнение поставлено "на паузу", мы можем просмотреть текущие значения переменных, выполнить команды в консоли, одним словом, мы выполняем отладку кода.
Пока исполнение поставлено "на паузу", мы можем просмотреть текущие значения переменных, выполнить команды в консоли, одним словом, мы выполняем отладку кода.

В правой части графического интерфейса мы видим список точек останова. А когда таких точек выставлено много, да ещё и в разных файлах, этот список поможет эффективно управлять точками останова:
В правой части графического интерфейса мы видим список точек останова. А когда таких точек выставлено много, да ещё и в разных файлах, этот список поможет эффективно ими управлять:
- Быстро переместиться к любой точке останова в коде – нужно щёлкнуть по точке в правой части экрана.
- Временно деактивировать точку – в общем списке снимите галочку напротив ненужной в данный момент точки.
- Удалить точку – щёлкните по ней правой кнопкой мыши и выберите Remove (Удалить).
- ...и так далее.

```smart header="Conditional breakpoints"
Можно задать и так называемую точку останова *с условием* – щёлкните правой кнопкой мыши по номеру строки в коде. Если задать выражение, то именно при его истинности выполнение кода будет приостановлено.
Можно задать и так называемую *условную* точку останова – щёлкните правой кнопкой мыши по номеру строки в коде. Если задать выражение, то именно при его истинности выполнение кода будет приостановлено.
Этот метод используется, когда выполнение кода нужно остановить при присвоении определённого выражения какой-либо переменной или при определённых параметрах функции.
Expand All @@ -85,12 +85,12 @@ function hello(name) {
}
```

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


## Время, остановись
## Остановимся и оглядимся

В нашем примере функция `hello()` вызывается во время загрузки страницы, поэтому для начала отладки проще всего её перезагрузить. Нажмите `F5` (Windows, Linux) или `Cmd+R` (Mac).
В нашем примере функция `hello()` вызывается во время загрузки страницы, поэтому для начала отладки проще всего её перезагрузить. Нажмите `key:F5` (Windows, Linux) или `key:Cmd+R` (Mac).

Выполнение прервется на четвертой строчке:

Expand All @@ -116,43 +116,43 @@ function hello(name) {

Не обращайте пока внимание на ключевое слово `this` – его мы изучим чуть позже.

## Пошаговое выполнение сценария
## Пошаговое выполнение скрипта

А теперь давайте *прошагаем* по нашему коду.

В правой части панели для этого есть несколько кнопок. Рассмотрим их.

<span class="devtools" style="background-position:-7px -76px"></span> – продолжить выполнение. Быстрая клавиша – `F8`.
<span class="devtools" style="background-position:-7px -76px"></span> – продолжить выполнение. Быстрая клавиша – `key:F8`.
: Возобновляет выполнение кода. Если больше нет точек останова, отладчик прекращает работу и позволяет приложению работать дальше.

Вот что происходит:

![](chrome-sources-debugger-trace-1.png)

Выполнение кода возобновилось, затем отладчик обратился к другой точке останова `say()` и приостановил выполнение. Обратите внимание на пункт "Call stack" справа: в списке появился ещё один вызов. Далее мы наблюдаем выполнение функции `say()`.
Выполнение кода возобновилось, затем отладчик обратился к другой точке останова внутри `say()` и приостановил выполнение. Обратите внимание на пункт "Call stack" справа: в списке появился ещё один вызов. Далее мы наблюдаем выполнение функции `say()`.

<span class="devtools" style="background-position:-137px -76px"></span> – сделать шаг (выполнить следующую команду), *не заходя в функцию*. Быстрая клавиша – `F10`.
<span class="devtools" style="background-position:-137px -76px"></span> – сделать шаг (выполнить следующую команду), *не заходя в функцию*. Быстрая клавиша – `key:F10`.
: При нажатии видим, что вызвана функция `alert`. Важно: на месте `alert` может быть любая другая функция, а выполнение просто *перешагнёт через неё*, полностью игнорируя её содержимое.

<span class="devtools" style="background-position:-72px -76px"></span> – сделать шаг. Быстрая клавиша – `F11`.
: В отличие от предыдущего примера, здесь мы "заходим" во вложенные функции и шаг за шагом проходим по сценарию.
<span class="devtools" style="background-position:-72px -76px"></span> – сделать шаг. Быстрая клавиша – `key:F11`.
: В отличие от предыдущего примера, здесь мы "заходим" во вложенные функции и шаг за шагом проходим по скрипту.

<span class="devtools" style="background-position:-104px -76px"></span> – продолжить выполнение до завершения текущей функции. Быстрая клавиша – `Shift+F11`.
: Выполнение кода остановится на самой последней строчке текущей функции. Этот метод применяется, когда мы случайно нажали <span class="devtools" style="background-position:-72px -76px"></span> и зашли в функцию, но нам она неинтересна и мы мы как можно скорее хотим из неё выбраться.
<span class="devtools" style="background-position:-104px -76px"></span> – продолжить выполнение до завершения текущей функции. Быстрая клавиша – `key:Shift+F11`.
: Выполнение кода остановится на самой последней строчке текущей функции. Этот метод применяется, когда мы случайно нажали <span class="devtools" style="background-position:-72px -76px"></span> и зашли в функцию, но нам она неинтересна и мы как можно скорее хотим из неё выбраться.

<span class="devtools" style="background-position:-7px -28px"></span> – активировать/деактивировать все точки останова.
: Эта кнопка не влияет на выполнение кода, она лишь позволяет массово включить/отключить точки останова.

<span class="devtools" style="background-position:-264px -4px"></span> – разрешить/запретить остановку выполнения в случае возникновения ошибки.
: Если опция включена и инструменты разработчика открыты, любая ошибка в сценарии приостанавливает выполнение кода, что позволяет его проанализировать. Поэтому если сценарий завершается с ошибкой, открываем отладчик, включаем эту опцию, перезагружаем страницу и локализуем проблему.
: Если опция включена и инструменты разработчика открыты, любая ошибка в скрипте приостанавливает выполнение кода, что позволяет его проанализировать. Поэтому если скрипт завершается с ошибкой, открываем отладчик, включаем эту опцию, перезагружаем страницу и локализуем проблему.

```smart header="Continue to here"
Если щёлкнуть правой кнопкой мыши по строчке кода, в контекстном меню можно выбрать опцию "Continue to here" ("не прерываться до этого места").
Если щёлкнуть правой кнопкой мыши по строчке кода, в контекстном меню можно выбрать опцию "Continue to here" ("продолжить до этого места").
Этот метод используется, когда нам нужно продвинуться на несколько шагов вперёд, но нам лень выставлять точки останова.
Этот метод используется, когда нам нужно продвинуться на несколько шагов вперёд, но лень выставлять точки останова.
```

## Отслеживание событий выполнения (Логирование)
## Логирование

Если нужно что-то вывести в консоль, применяется функция `console.log`.

Expand All @@ -165,22 +165,22 @@ for (let i = 0; i < 5; i++) {
}
```

Все выводы в консоль скрыты от простого пользователя. Напомним, что консоль можно открыть только через инструменты разработчика – выберите пункт "Консоль" или нажмите `Esc`, находясь в любом другом разделе – консоль откроется в нижней части интерфейса.
Все выводы в консоль скрыты от простого пользователя. Напомним, что консоль можно открыть только через инструменты разработчика – выберите пункт "Консоль" или нажмите `key:Esc`, находясь в любом другом разделе – консоль откроется в нижней части интерфейса.

Если правильно выстроить логирование в приложении, то можно и без отладчика разобраться, что происходит в коде.

## Итого

Приостановить выполнение сценария можно тремя способами:
Приостановить выполнение скрипта можно тремя способами:

1. Расстановка и применение точек останова.
2. Использование выражения `debugger`.
3. Вызов ошибки (если инструменты разработчика открыты и опция <span class="devtools" style="background-position:-264px -4px"></span> включена).
3. Ошибка (если инструменты разработчика открыты и опция <span class="devtools" style="background-position:-264px -4px"></span> включена).

Всё это позволяет проанализировать переменные и пошагово пройти по процессу, что поможет отыскать проблему.

Нами описаны далеко не все инструменты разработчика. С полным руководством можно ознакомиться здесь: <https://developers.google.com/web/tools/chrome-devtools>.

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

И, наконец, не забывайте, что можно просто методом проб и ошибок прощёлкать оставшиеся инструменты разработчика. Пожалуй, это наискорейший способ ими овладеть. А ведь есть ещё и правый клик!

0 comments on commit 05a7526

Please sign in to comment.