Отладчик в VS Code
В VS Code есть кнопки отладки, и под ними работает тот же dlv. Сначала честная оговорка — почему главное сегодня всё-таки терминал:
dlvв терминале есть везде, где есть Go, в том числе на сервере без редактора;- тренажёр видит команды, набранные в терминале, а нажатия кнопок в редакторе не видит. Пункты проверки дня засчитываются по терминалу;
- экранные шаги этой страницы на стенде курса не проверялись. Названия кнопок и пунктов меню у вас могут немного отличаться. Файл
launch.jsonв конце страницы проверка сверяет — это обычный текст.
Первое знакомство с отладкой в редакторе было при настройке: docs/setup/ide.md, шаг 6.6.
Точка, запуск, шаги
Откройте папку дня: code ~/gocourse/day09. Откройте priemka/main.go.
- Точка останова — щелчок слева от номера строки или
F9на текущей строке. Появляется красная точка. - Запуск —
F5. Если редактор спросит, какой отладчик взять, — Go. - Остановка — строка подсвечена: программа остановилась перед ней, как у стрелки
=>вdlv. Слева в панели Variables — переменные, какlocals. Наведите мышь на имя переменной в коде — всплывёт её значение. - Условие на точке — правый щелчок по красной точке, Edit Breakpoint, выражение
i == 7,Enter. Этоcondition.
Кнопки на панели отладки и их двойники в dlv:
| Кнопка | Клавиша | В dlv |
|---|---|---|
| Continue | F5 |
continue |
| Step Over | F10 |
next |
| Step Into | F11 |
step |
| Step Out | Shift+F11 |
stepout |
| Restart | Ctrl+Shift+F5 |
rebuild |
| Stop | Shift+F5 |
exit |
Программа с вводом: launch.json
Ситуация. priemka читает ввод. Без настроек F5 запускает программу так, что её вывод идёт во вкладку Debug Console, а ввод туда не передаётся: программа ждёт строк, которые ввести некуда.
Решение — файл настроек запуска .vscode/launch.json в папке дня. В нём указано, какую программу отлаживать и где её запускать. Строка "console": "integratedTerminal" запускает программу во встроенном терминале редактора: туда можно печатать ввод. В описании расширения Go эта настройка помечена Experimental — «пробная».
Папку ~/gocourse/day09/.vscode стенд уже создал. Откройте в ней новый файл:
stagiaire@lab:~$ cd ~/gocourse/day09
stagiaire@lab:~/gocourse/day09$ code .vscode/launch.jsonВставьте текст и сохраните — Ctrl+S:
.vscode/launch.json{
"version": "0.2.0",
"configurations": [
{
"name": "priemka",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}/priemka",
"console": "integratedTerminal"
}
]
}| Строка | Что значит |
|---|---|
"name" |
имя конфигурации в списке панели Run and Debug |
"type": "go" |
отладчик Go |
"request": "launch" |
запустить программу, а не подключаться к запущенной |
"mode": "debug" |
собрать из исходников, как dlv debug |
"program" |
каталог программы; ${workspaceFolder} — открытая папка, то есть ~/gocourse/day09 |
"console": "integratedTerminal" |
программа работает во встроенном терминале, ввод набирается там |
Чтобы отлаживать другую программу, поменяйте "program" или добавьте в "configurations" второй такой блок через запятую со своим "name".
Запуск: панель Run and Debug (Ctrl+Shift+D), в списке наверху — priemka, F5. Во встроенном терминале наберите строки ввода по одной, конец ввода — Ctrl+D, как в дне 07. Подать программе файл стрелкой < из launch.json нельзя: ввод из файла под отладчиком в этом курсе подаём только через dlv debug -r в терминале.
Попробуйте сейчас: launch.json и отладка в VS Code.
Цель: файл
launch.jsonв папке~/gocourse/day09/.vscodeи сеанс отладкиpriemkaкнопками редактора.1. Откройте новый файл в редакторе:
▶ Выполнитеcd ~/gocourse/day09 code .vscode/launch.json2. Наберите текст и сохраните —
Ctrl+S. Что значит каждая строка — в таблице раздела «Программа с вводом: launch.json»:✎ Наберите в файл.vscode/launch.json{ "version": "0.2.0", "configurations": [ { "name": "priemka", "type": "go", "request": "launch", "mode": "debug", "program": "${workspaceFolder}/priemka", "console": "integratedTerminal" } ] }3. Поставьте точку на строке 25
priemka, запуститеF5, наберите в терминале12,8иCtrl+D. Посмотритеtotalв панели Variables на каждой остановке и пройдите программуF10до конца.Если кнопки у вас выглядят иначе или отладка в редакторе не запускается — не задерживайтесь: засчитывается файл, а отладчик дня —
dlvв терминале.Готово, когда: пункт
launchвcourse check 09зелёный.
Что может пойти не так
| Что видите | Что это значит | Что делать |
|---|---|---|
| Программа ждёт ввода, а ввести некуда | выбрана конфигурация без "console": "integratedTerminal" или launch.json не прочитан |
проверьте файл и выбор в списке панели Run and Debug |
Сообщение со словами could not launch process |
те же причины, что в терминале: в "program" не тот каталог или там не package main |
"program" — каталог программы с package main |
Could not attach to pid ...: ... ptrace_scope |
конфигурация подключается к запущенной программе | "request": "launch" |
course check: launch.json не засчитан |
файл не там или JSON не разобрался: пропущена кавычка, запятая или скобка | файл — launch.json в папке ~/gocourse/day09/.vscode; сравните с образцом, VS Code подчёркивает ошибку красным |
Дальше: типовые дефекты — course next