День 09 · Отладчик и поиск ошибок · страница 5 из 6

Отладчик в VS Code

В VS Code есть кнопки отладки, и под ними работает тот же dlv. Сначала честная оговорка — почему главное сегодня всё-таки терминал:

Первое знакомство с отладкой в редакторе было при настройке: docs/setup/ide.md, шаг 6.6.


Точка, запуск, шаги

Откройте папку дня: code ~/gocourse/day09. Откройте priemka/main.go.

Кнопки на панели отладки и их двойники в 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.json

2. Наберите текст и сохраните — 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