Go:
Использование отладчика

Как:

Go предоставляет встроенное средство для отладки под названием delve. Это полнофункциональный инструмент отладки, который позволяет выполнять программы на Go шаг за шагом, проверять переменные программы и вычислять выражения.

Для начала вам необходимо установить delve. Это можно сделать, запустив:

go get -u github.com/go-delve/delve/cmd/dlv

Теперь давайте отладим простую программу на Go. Рассмотрим программу main.go:

package main

import "fmt"

func main() {
    message := "Отладка в Go"
    fmt.Println(message)
}

Чтобы начать отладку этой программы, откройте терминал в директории проекта и выполните:

dlv debug

Эта команда компилирует программу с отключенными оптимизациями (чтобы улучшить опыт отладки), запускает ее и подключает к ней отладчик.

После запуска delve вы перейдете в интерактивный shell отладчика. Вот несколько основных команд:

  • break main.main устанавливает точку останова в функции main.
  • continue возобновляет выполнение программы до достижения точки останова.
  • print message будет печатать значение переменной message.
  • next продвигает выполнение программы к следующей строке.
  • quit выходит из отладчика.

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

Точка останова 1 на 0x49ecf3 для main.main() ./main.go:6
> main.main() ./main.go:6 (срабатывания в горутине(1):1 всего:1) (PC: 0x49ecf3)
     1: package main
     2:
     3: import "fmt"
     4:
     5: func main() {
     6: =>    message := "Отладка в Go"
     7:       fmt.Println(message)
     8: }
(dlv) print message
"Отладка в Go"

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

Глубокое погружение

Выбор delve в качестве предпочтительного инструмента отладки для Go вместо традиционных инструментов, таких как GDB (GNU Debugger), во многом обусловлен спецификой модели выполнения и среды выполнения Go. GDB изначально не был разработан с учетом среды выполнения Go, что делает delve более подходящим выбором для разработчиков на Go. Delve специально разработан для Go, предлагая более интуитивно понятный опыт отладки для горутин, каналов и других конструкций, специфичных для Go.

Кроме того, delve поддерживает широкий спектр функций, выходящих за рамки того, что предлагает базовый GDB при работе с программами на Go. К ним относятся, помимо прочего: подключение к выполняющимся процессам для отладки; условные точки останова; и оценка сложных выражений, которые могут включать в себя примитивы конкуренции Go.

Хотя delve является предпочтительным отладчиком для многих разработчиков Go, стоит отметить, что инструментарий Go также включает в себя более легковесные формы поддержки отладки, такие как встроенный инструмент pprof для профилирования и инструмент trace для визуализации конкуренции. Эти инструменты иногда могут предоставить более быстрый или более высокоуровневый путь для диагностики проблем с производительностью программы или ошибок конкуренции, которые могут быть дополнительными или даже предпочтительными в зависимости от контекста отладки.