Отладка кода Go с помощью Visual Studio Code
Development | Комментировать запись
В этом руководстве мы поговорим о том, как отладить код 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: Visual Studio Code