cpp

Отладка программы в редакторе Visual Studio Code

Сделать поиск ошибок более эффективным позволяет отладчик, встроенный в редактор Visual Studio Code (далее VS Code). С его помощью можно выполнять программу по шагам, при этом контролируя значения переменных на каждом шаге. Отладчик позволяет также проверить, соответствует ли порядок выполнения инструкций разработанному ранее алгоритму.

Для установки VS Code переходим на сайт https://code.visualstudio.com/ и скачиваем программу установки из раздела User Installer. Установка предельно проста и в комментариях не нуждается. После установки запускаем редактор.

По умолчанию редактор не содержит поддержки русского языка и языка Go. Чтобы интерфейс был на русском языке установим языковое расширение. Для этого в меню Вид выбираем пункт Расширения или нажимаем комбинацию клавиш <Shift>+<Ctrl>+<X>. В результате отобразится панель Расширения. В строке поиска вводим "Russian Language Pack for Visual Studio Code". Выбираем расширение из списка и устанавливаем его. Точно также устанавливаем расширение Go. После установки расширений перезапускаем редактор.

Теперь переходим к настройкам. В меню Файл выбираем пункт Настройки | Параметры или нажимаем комбинацию клавиш <Ctrl>+<Запятая>. Выполняем настройку следующих параметров в разделе Пользователь (вводим их названия в поле для поиска):

  • Editor: Font Family — содержит названия используемых шрифтов. Рекомендуем значение "Consolas, 'Courier New', Consolas, monospace".
  • Editor: Font Size — задает размер шрифта. Можете подобрать удобное значение, например, 16.
  • Editor: Tab Size — число пробелов в табуляции. Вводим значение 3.
  • Editor: Detect Indentation — сбрасываем флажок, чтобы всегда использовать пробелы вместо символов табуляции.
  • Editor: Mouse Wheel Zoom — если флажок установлен, то изменять масштаб можно с помощью колесика мыши, удерживая нажатой клавишу <Ctrl>.
  • Editor: Word Wrap — задает стиль переноса длинных строк. Из списка выбираем пункт bounded, чтобы длинные строки автоматически переносились на новую строку.
  • Editor: Word Wrap Column — задает количество символов в строке. Должно быть указано значение 80 (используется по умолчанию).
  • Files: Auto Save — управляет автоматическим сохранением файла. Рекомендуем из списка выбрать пункт onFocusChange, при котором файл будет автоматически сохраняться при потере фокуса ввода. Начинающие программисты очень часто забывают сохранить изменения. При этой настройке не будет глупых вопросов, почему изменения в файл внес, а результат выполнения программы не изменился?
  • Editor: Links — снимите флажок, если не хотите, чтобы внутри файла выделялись ссылки. С одной стороны удобно открывать файл переходом по ссылке, но с другой стороны подчеркнутые ссылки мешают.
  • Files: Encoding — из списка выбираем пункт utf8. Мы будем работать с кодировкой UTF-8 без BOM (метки порядка байтов).
  • Files: Eol — задает символ перевода строк. Из списка выбираем пункт \n. Чтобы сменить символ перевода строк для текущего файла в строке состояния щелкаем левой кнопкой мыши на значке CRLF или LF, а затем из списка выбираем нужный пункт.

Точно таким же способом можно произвести и другие настройки. Все произведенные изменения настроек в разделе Пользователь сохраняются в файле settings.json, который расположен в каталоге C:\Users\<Имя пользователя>\AppData\Roaming\Code\User. Этот файл можно открыть в редакторе и изменить. Для открытия файла settings.json, в редакторе VS Code справа в строке заголовков вкладок щелкаем левой кнопкой мыши на значке Открыть параметры (JSON). Содержимое файла отобразится на отдельной вкладке.

Если изменение настроек выполняется в разделе Рабочая область, то файл settings.json создается в каталоге проекта во вложенном каталоге .vscode. Таким образом можно для каждого проекта добавить свой собственный конфигурационный файл с различными настройками.

Теперь откроем каталог C:\book\packages в редакторе. Для этого в меню Файл выбираем пункт Открыть папку. В открывшемся окне выбираем каталог и нажимаем кнопку Выбор папки. Можно также перетащить значок каталога из Проводника Windows на боковую панель Проводник. Как только на панели изменился цвет фона на синий сбрасываем значок. Это самый простой и наиболее часто используемый способ открытия каталога. Внутри панели Проводник щелкаем на названии файла main.go, чтобы отобразить его содержимое на отдельной вкладке.

В процессе работы с программой на языке Go редактор выведет запрос на установку дополнительных пакетов. Вот список пакетов и процесс установки:

Tools environment: GOPATH=C:\Users\Unicross\go
Installing 9 tools at C:\Users\Unicross\go\bin in module mode.
  gopkgs
  go-outline
  gotests
  gomodifytags
  impl
  goplay
  dlv
  golint
  gopls

Installing github.com/uudashr/gopkgs/v2/cmd/gopkgs 
(C:\Users\Unicross\go\bin\gopkgs.exe) SUCCEEDED
Installing github.com/ramya-rao-a/go-outline 
(C:\Users\Unicross\go\bin\go-outline.exe) SUCCEEDED
Installing github.com/cweill/gotests/... 
(C:\Users\Unicross\go\bin\gotests.exe) SUCCEEDED
Installing github.com/fatih/gomodifytags 
(C:\Users\Unicross\go\bin\gomodifytags.exe) SUCCEEDED
Installing github.com/josharian/impl (C:\Users\Unicross\go\bin\impl.exe) 
SUCCEEDED
Installing github.com/haya14busa/goplay/cmd/goplay 
(C:\Users\Unicross\go\bin\goplay.exe) SUCCEEDED
Installing github.com/go-delve/delve/cmd/dlv 
(C:\Users\Unicross\go\bin\dlv.exe) SUCCEEDED
Installing golang.org/x/lint/golint (C:\Users\Unicross\go\bin\golint.exe) 
SUCCEEDED
Installing golang.org/x/tools/gopls (C:\Users\Unicross\go\bin\gopls.exe) 
SUCCEEDED

All tools successfully installed. You are ready to Go :).

Теперь создадим конфигурацию отладки. Для этого переходим на боковую панель Запустить. Для отображения панели в меню Вид выбираем пункт Выполнить или нажимаем комбинацию клавиш <Shift>+<Ctrl>+<D>. Далее переходим по ссылке создайте файл launch.json. Отобразится Палитра команд с возможными вариантами конфигурации. Выбираем пункт Go Launch Package. В результате будет создан файл C:\book\packages\.vscode\launch.json со следующим содержимым:

{
   "version": "0.2.0",
   "configurations": [
      {
         "name": "Launch Package",
         "type": "go",
         "request": "launch",
         "mode": "debug",
         "program": "${workspaceFolder}"
      }
   ]
}

Все готово для запуска отладки.

В качестве примера мы будем отлаживать программу из листинга 13.4, которая содержит две наиболее часто встречающиеся ошибки: выход за пределы слайса и нумерация элементов слайса с 1, а не с 0.

Листинг 13.4. Содержимое файла C:\book\packages\main.go

package main                                // 1
                                            // 2
import "fmt"                                // 3
                                            // 4
func main() {                               // 5
   arr := [][]int{                          // 6
      {1, 2, 3, 4},                         // 7
      {5, 6, 7, 8},                         // 8
   }                                        // 9
   i, j := 0, 0                             // 10
   for i = 0; i <= len(arr); i++ {          // 11
      for j = 1; j < len(arr[i]); j++ {     // 12
         test(arr[i][j])                    // 13
      }                                     // 14
      fmt.Println()                         // 15
   }                                        // 16
}                                           // 17
func test(n int) {                          // 18
   s := fmt.Sprintf("%3d", n)               // 19
   fmt.Print(s)                             // 20
}                                           // 21

Прежде чем начать отладку, необходимо пометить строки внутри программы с помощью точек останова. Для добавления точки останова делаем строку активной, а затем в меню Выполнить выбираем пункт Переключить точку останова или нажимаем клавишу <F9>, — слева от строки появится красный кружок, обозначающий точку останова. Повторное действие убирает точку останова. Добавить точку останова можно еще быстрее. Для этого достаточно выполнить щелчок левой кнопкой мыши слева от строки. Повторный двойной щелчок позволяет удалить точку останова. Чтобы изменить свойства точки, временно отключить или удалить ее, следует щелкнуть на ней правой кнопкой мыши и в открывшемся контекстном меню выбрать пункт Отключить, Включить или Удалить. Давайте установим в нашей программе две точки останова: напротив строк 10 и 13.

Отладка программы выполняется на панели Запустить. Для отображения панели в меню Вид выбираем пункт Выполнить или нажимаем комбинацию клавиш <Shift>+<Ctrl>+<D>. На панели расположен раздел Точки останова, внутри которого отображаются все установленные точки останова. С помощью этого раздела можно управлять точками останова: временно отключать их, удалять и т. д. Нам также понадобится консоль в которую будет выводиться отладочная информация. Чтобы отобразить консоль в меню Вид выбираем пункт Консоль отладки или нажимаем комбинацию клавиш <Shift>+<Ctrl>+<Y>.

Когда точки останова расставлены, можно начать отладку. Для этого в меню Выполнить выбираем пункт Запустить отладку или нажимаем клавишу <F5>. При достижении точки останова выполнение программы прерывается, и отладчик ожидает дальнейших действий программиста. Инструкция, которая будет выполняться на следующем шаге, помечается желтым фоном. Чтобы прервать отладку, в меню Выполнить выбираем пункт Остановить отладку или нажимаем комбинацию клавиш <Shift>+<F5>.

После запуска отладчика выполнение программы прервется на строке 10 — в том месте, где установлена первая точка останова. В режиме прерывания можно посмотреть значения различных переменных. Для этого достаточно навести указатель мыши на название переменной. Попробуйте навести указатель на название слайса arr — во всплывающем окне отобразятся значения всех элементов слайса. Если навести указатель мыши на переменные i и j, то мы не получим их значений, так как поток управления еще не дошел до этих переменных. Их значение мы увидим только после следующего шага.

Посмотреть значения сразу всех переменных можно в разделе Переменные на панели Запустить. При отладке можно контролировать значения отдельных переменных, а не всех сразу. Для этого следует добавить название переменной в разделе Контрольное значение на панели Запустить, щелкнув левой кнопкой мыши на значке Добавить выражение., расположенном в заголовке раздела. Давайте добавим в этом разделе переменные i и j.

Для пошагового выполнения программы предназначены следующие пункты в меню Выполнить или соответствующие кнопки на панели инструментов:

  • Шаг с заходом (клавиша <F11>) — выполняет одну инструкцию или выражение. Давайте сделаем один шаг и посмотрим на значения переменных i и j в разделе Контрольное значение — обе переменные получили значение 0. Делаем еще два шага и останавливаемся на строке 13, которая у нас помечена точкой останова. Если мы сделаем еще один шаг, то попадем внутрь функции print(). Обратите внимание на значения переменных i и j в окне Контрольное значение — они стали не определены, так как мы находимся в области видимости функции print();
  • Шаг с выходом (комбинация клавиш <Shift>+<F11>) — позволяет сразу выйти из функции. Давайте сделаем шаг и выйдем из функции print(). В результате текущей станет строка 13;
  • Шаг с обходом (клавиша <F10>) — выполняет одну инструкцию. Если в инструкции производится вызов функции, то функция выполняется, и отладчик переходит в режим ожидания после выхода из функции. Давайте сделаем три шага и окажемся на строке 12, не входя в функцию print();
  • Продолжить (клавиша <F5>) — выполняет инструкции до следующей точки останова или до конца программы при отсутствии точек. Нажимая клавишу <F5>, мы каждый раз будем останавливаться на строке 13 и сможем наблюдать за текущими значениями переменных i и j в разделе Контрольное значение, а также за выводом результатов работы программы на панели Консоль отладки. На одном из шагов можно обнаружить, что значение переменной i стало равно 2, и сразу после следующего шага возникает паника. Если вы не успели этого заметить, то запустите отладку еще раз и наблюдайте за значениями переменных. Так как значение переменной i стало равно 2, а в следующей строке идет обращение к слайсу по этому индексу, и возникает исключение, следовательно, что-то не так со значением переменной i. Смотрим внимательно на предыдущую инструкцию и обнаруживаем неправильное условие окончания цикла в строке 11 (i <= len(arr)). Исправляем ошибку, и выражение примет вид i < len(arr). Опять запускаем отладку, чтобы убедиться в правильности внесенных изменений.

Если мы попробуем перейти сразу к строке 15, то это не получится, так как существует точка останова на строке 13. А нам бы хотелось увидеть вывод одной строки слайса сразу. Для этого можно временно отключить точку останова, щелкнув на ней правой кнопкой мыши и выбрав в контекстном меню пункт Отключить. Если у нас точек будет много, то каждый раз выбирать пункт из контекстного меню станет утомительно. Можно временно отключить сразу все точки останова, выбрав в разделе Точки останова пункт Отключить точки останова.

Давайте отключим точку останова на строке 13 и добавим точку на строке 15. Теперь, нажав клавишу <F5>, можно сразу перейти к строке 15. После этого действия мы заметим, что вместо четырех значений выводятся только три. Чтобы понять причину, опять выполняем программу по шагам и наблюдаем за значениями переменных в разделе Контрольное значение. В один прекрасный момент понимаем, что индексы нумеруются с 0, а не с 1, и исправляем ошибку в строке 12 (j = 0 вместо j = 1);

  • Остановить отладку (комбинация клавиш <Shift>+<F5>) — останавливает отладку.

Применение отладки — это самый эффективный способ нахождения ошибок, не требующий вставки никаких инструкций вывода промежуточных значений в текст программы. На каждом шаге мы и так можем наблюдать за значениями всех или только избранных переменных. После отладки не нужно удалять или временно отключать какие-либо инструкции, даже точки останова убирать не нужно. При обычном выполнении точки останова ни на что не влияют. Пользуйтесь отладкой при возникновении любой ошибки, и вы очень быстро ее найдете и исправите.

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp