Отладка кода 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