# Отладка приложения

При написании кода неизбежно возникают ошибки и если синтаксические ошибки нам помогает обнаружить среда разработки (IDE), то часть ошибок могут проявиться только при работе приложения (**Run Time Error** - ошибки времени выполнения). Это могут быть как логические ошибки программиста, так и неверные входные данные.

Поиск ошибок выполняется двумя способами: *отладка* и *тестирование*. Тестирование отдельная большая тема и мы будем изучать его в следующем году.

Все IDE позволяют производить отладку приложения, т.е. пошаговое выполнение кода с просмотром значений переменных (для компилируемых приложений есть специальный режим сборки - **debug**, когда в код программы включается отладочная информация, позволяющая связать двоичный код с исходным). 

Перед началом отладки нужно убедиться, что в IDE установлен режим сборки **Debug**:

![](../img/debug_01.png)

Перед запуском в режиме отладки установите **точку остановки** в том месте кода, которое вы хотите проверить (просто кликнув кнопкой по левому полю):

![](../img/debug_02.png)

Когда выполнение приложения дойдет до этой точки, выполнение приостановится и мы сможем исследовать состояние и пошагово выполнить код:

* желтая стрелка слева показывает в каком месте кода мы находимся
* в нижней панели есть кнопки, позволяющие выполнять код по шагам. эти кнопки имеют и быстрые клавиши

    * *шаг с заходом* (F7) - используется, если мы хотим "зайти" в функцию, которая находится в текущей строке
    * *шаг с обходом* (F8) - выражение в текущей строке выполняется за один шаг, без захода

* значение переменной можно посмотреть 
    * либо просто наведя курсор на неё:

        ![](../img/debug_04.png)

        Если переменная не скалярного типа, а объект, то содержимое объекта можно посмотреть кликнув по треугольнику слева от содержимого:

        ![](../img/debug_05.png)

    * либо, если нам нужно отслеживать её значение на каждом шаге, внизу экрана 

        ![](../img/debug_06.png)

        Можно на вкладке "контрольные значения" добавить сложное выражение (цепочку свойств объекта+- или даже вызов функции)

        ![](../img/debug_07.png)

## Задание

Выполните в режиме отладки любую программу из прошлой лабораторной работы. Все этапы сохраняйте скриншотами и включите их в отчёт (`readme.md`)

1. Используйте точки останова
1. Отслеживайте значения переменных на вкладке "контрольные значения"

Пример включения изображения в `md` файл

```md
Формат

![alt-строка (не обязательно)](<путь к изображению>)

Пример из этой лекции

![](../img/debug_07.png)
```

* Имена файлов чувствительны к регистру.
* Используйте относительные пути (например, для текущего каталога `./`)