Отладка кода Go с помощью Visual Studio Code

В этом руководстве мы поговорим о том, как отладить код Go с помощью Visual Studio Code, а также установить необходимые расширения, инструменты анализа и отладчики.

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

Благодаря этому набору навыков вы сможете точнее оценить состояние вашего приложения в определенные моменты выполнения его кода.

Требования

  • Базовые знания по Go.
  • Копия Go на вашем компьютере. Чтобы установить Go, следуйте руководству Установка Go и настройка локальной среды разработки в macOS, Ubuntu или Windows.
  • Установка Visual Studio Code на вашем компьютере.
  • Плагин VSCide-Go. После установки плагина откройте любой файл .go в VS Code. В правом нижнем углу строки состояния вы увидите Install Analysis Tools. Нажмите на эту ссылку, чтобы установить пакеты Go, необходимые для эффективной работы плагина.
  • Установка Delve, отладчика для Go с открытым исходным кодом. Подробные инструкции по установке для конкретных платформ вы найдете здесь.

1: Создание тестового приложения

В этом мануале мы будем использовать два примера для отладки кода Go:

  • Программа Go, создающая файл JSON.
  • Функция и тест.

Ниже вы найдете исходный код для первого примера – программы. Создайте файл main.go:

nano main.go

Добавьте в файл следующий код:

package main

import (
                "encoding/json"
                "fmt"
                "log"
)

// Avenger represents a single hero
type Avenger struct {
                RealName string `json:"real_name"`
                HeroName string `json:"hero_name"`
                Planet   string `json:"planet"`
                Alive    bool   `json:"alive"`
}

func (a *Avenger) isAlive() {
                a.Alive = true
}

func main() {
                avengers := []Avenger{
                               {
                                               RealName: "Dr. Bruce Banner",
                                               HeroName: "Hulk",
                                               Planet:   "Midgard",
                               },
                               {
                                               RealName: "Tony Stark",
                                               HeroName: "Iron Man",
                                               Planet:   "Midgard",
                               },
                               {
                                               RealName: "Thor Odinson",
                                               HeroName: "Thor",
                                               Planet:   "Midgard",
                               },
                }

                avengers[1].isAlive()

                jsonBytes, err := json.Marshal(avengers)
                if err != nil {
                               log.Fatalln(err)
                }
                fmt.Println(string(jsonBytes))
}

В этом коде мы определили структуру Avenger, а затем создали массив Avengers, изменили статус одного из них на “alive”, конвертировали результаты в JSON и, наконец, вывели их в STDOUT.

Вы можете запустить приложение с помощью команды:

go run main.go

Результат будет выглядеть так:

[{"real_name":"Dr. Bruce Banner","hero_name":"Hulk","planet":"Midgard","alive":false},{"real_name":"Tony Stark","hero_name":"Iron Man","planet":"Midgard","alive":true},{"real_name":"Thor Odinson","hero_name":"Thor","planet":"Midgard","alive":false}]

2: Отладка по точкам останова

Чтобы начать отладку, нам нужно создать конфигурацию. Нажмите на значок отладки в левой панели Visual Studio. Затем нажмите на шестеренку, чтобы создать конфигурацию.

Вы создадите файл конфигурации в .vscode/launch.json с показанным выше содержимым. Перенаправьте программу конфигурации на файл main.go; поскольку на данный момент у нас есть только файл main.go, мы можем перейти в root рабочей области:

{
  // ...
  "configuration": [
    {
      // ...
      "program": "${workspaceRoot}",
      // ...
    }
  ]
}

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

Давайте добавим точку останова в строку 21 (func main()). Для этого кликните слева от номера строки, и вы увидите красную точку.

Затем нажмите либо F5, либо кнопку Launch в разделе Debug в левом верхнем углу, чтобы открыть представление Debug View.

Нажмите несколько раз кнопку Step Over на панели Debug Toolbar.

Отладчик в конечном итоге переместится на строку 40.

Раздел Debug покажет нам состояние текущей позиции точки останова.

Мы можем увидеть состояние или значение переменных в это конкретное время в разделе Variables.

Также можно просмотреть стек вызовов. Здесь показано, что на данный момент запущена функция main и строка 40.

Если вы продолжите нажимать Stepping Over, вы увидите, как изменится значение avengers: “Tony Stark” будет иметь значение Alive.

3: Добавление условных точек останова

VS Code предоставляет вам возможность редактировать точки останова, задавая им выражение (в большинстве случаев это логическое выражение).

Например, в строке 40:

avengers[1].isAlive()

мы могли бы поместить условие, что точка останова поднимается только тогда, когда выражение оценивается как истинное, как в avengers[1].Planet == “Earth”.

Для этого щелкните правой кнопкой мыши на точку останова и выберите Edit Breakpoint.

Даже если у вас нет точки останова, вы все равно можете щелкнуть правой кнопкой мыши, и вам будет предложено добавить условную точку останова – Add Conditional Breakpoint.

Давайте добавим условие здесь:

avengers[1].Planet == "Earth"

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

Затем отредактируйте код, чтобы он соответствовал ожидаемому условию. Внесите такое изменение в main.go:

// ...
{
                RealName: "Tony Stark",
                HeroName: "Iron Man",
                Planet:   "Earth",
},
// ...

Когда мы снова запустим отладчик с помощью F5, откроется окно отладки, и вы увидите, что редактор останавливается в точке останова и что JSON не отображается в консоли Debug.

4: Выполнение отладочных тестов

Давайте добавим в файл main.go новую функцию, которая включит операцию сложения:

func add(a, b int) int{
                return a+b
}

Создайте в том же каталоге тестовый файл main_test.go со следующим содержимым:

package main

import "testing"

func Test_add(t *testing.T) {
                a, b, c := 1, 2, 3

                res := add(a, b)

                if res != c {
                               t.Fail()
                }
}

Данный код просто складывает два числа, а тест вызывает функцию.

Однако, если у вас установлен плагин VSCode-Go, вы увидите дополнительные параметры в верхней части функции — run test и debug test:

Вы можете нажать на run test, чтобы запустить тест и увидеть результаты в окне Output.

Для отладки теста (например, если мы не можем что-то понять) нужно добавить точку останова, как мы делали раньше, и нажать debug test.

Добавьте точку останова в строке 10, а затем нажмите на debug test.

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

Заключение

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

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

Tags:

Добавить комментарий