Как и зачем использовать дебаггер с GO

24.03.2020 дебаггер goland


Время, которое мы тратим на исправления бага, зависит от стадии, на которой баг найден:

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

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

Дебаггер здесь как нельзя кстати.
Это довольно стандартная тулза для разработчиков на разных языках программирования, но именно на GO разработчики зачастую пренебрегают этим инструментом.
Я опишу, почему дебаггер важен и как его использовать на примере Goland IDE.

Что такое дебаггер?

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

Итак, ставим брейкпоинт:

Далее при запуске с дебаггером, программа будет остановлена _перед_ помеченной брейкпоинтом инструкцией:

Слева можно увидеть трейс вызовов, через которые программа добралась до брейкпоинта.
Это бывает довольно полезно, когда вы хотите изучить, вызывается ли изучаемый вами фрагмент кода и через какую последовательность вызовов.
Да, через ту же Goland IDE вы можете посмотреть на используемость функции, так вы определите список вызовов более полно и точно, но может занять некоторое время, так как вам придется просмотреть используемость нескольких функций.

В правой стороне вы видите список всех переменных в области видимости брейкпоинта.
Через кнопки на левом (самом левом) тулбаре можно двигать программу между брейкпоинтами.

Почему стоит использовать дебаггер?

1. Для отладки не нужны правки в коде

Чтобы понять происходящее в программе, не надо добавлять никакой отладочный код. (вроде fmt.Print и тому подобное).
Если идти по пути добавления отладочного кода, то вскоре он будет добавлен практически во все файлы проекта. Не будет возможности отделить данный код от продакшн кода, придется отсматривать изменения в коде глазами перед коммитом. Все равно будет большая вероятность запушить отладку в репозиторий, что будет ошибкой.

2. Простой способ ознакомиться с любой переменной

Интерфейс изучения переменных в дебаггере Goland IDE более информативен, чем любой текстовый вывод, который можно спрограммировать через fmt.Print или даже вывод библиотеки-логгера. (Если ты только вы не собираетесь спрограммировать на GO GUY-приложение для отладки)
К примеру, можно изучить переменную комбинированного типа:

Вы видите массив байт как в виде массива, так и в читабельном виде, если кликнуть на ссылку "View".
Сколько времени потребуется вывести в консоль данные такого типа? Немало, и к тому же ваш этот код нужно будет писать для переменной каждого типа в отдельности.
Дебаггер же легко выводит переменные любого типа.

Минусы

Дебаггер, каким бы удобным он ни был, меняет поведение вашей программы.
К примеру, GO знаменит своей конкурентностью из коробки и наверняка в вашей программе множество горутин. Брейкпоинт ставится в конкретной из них, при этом что будет происходить в остальных горутинах — отдается на решение самому дебаггеру. В данном случае в Goland на каждом брейпоинте будут остановлены все горутины программы. Теоретически может возникнуть ситуация, когда вам надо получать отладочные данные, не блокируя деятельность программы. В таких случаях дебаггер не подойдет.

Вот, вроде бы и все.
Любые комментарии и мнения привествуются здесь на сайте или в телеграм-группе.

Другие статьи