Дебаг

Скорее всего за то время6 что вы делали домашние задания вам часто приходилось писать что-то в консоль, чтобы, банально, проверить, что происходит в вашей программе на данный момент. На самом деле в большинстве случаев это отнимает довольно много времени, ппока вы раставите ваши puts или p, потом это убирать, чтобы не оставлять мусор, потом окажется, что у вас снова что-то не работает и нужно по новой все это проделывать.

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

настрока редактора кода

Для того, чтобы начать пользоваться дебагом нам нобходимо иметь с ним интеграцию в нашем редакторе кода. Так как этот курс нацелен на использование Visual Studio Code, то руководство будет посвящено именно настройке работы в нем.

Для начала следует установить gem debug с помощью команды gem install debug.

Теперь давайте установим расширение VSCode rdbg Ruby Debugger.

Отлично, пол дела сделано. Перейдите в окно Run and Debug щекнув по его иконке в левом меню Visual Studio Code. В нем вы найдете пункт create a launch.json file, щелкните по нему и выберете из предложенного списка Ruby(rdbg). Теперь в вашей рабочей директории появится новый каталог .vscode в котором будут храниться ваши конфигурации для редактора кода, но в данный момент там будет находиться конфигурационный файл launch.json.

Внутри этого файла вы найдете 2 конфигурации для запуска дебага:

  1. Запуск режима Debug для одного файла Debug current file with rdbg.

  2. Запуск подключения VSCode к debug режиму Attach with rdbg.

Настало время проставить breakpoints. Откройте любой ваш .rb файл. В окне редактора кода слева вы можете найти номера строк кода. Если вы поднесете ваш курсор к этим числам (а если быть точнее6 то немного левее), то у вас появится красная точка. Щелкнув по этой красной точке она зафиксируется. Это место называется breakpoint, место, где программа останавливает свою работу и начинает работать пошагово с контролем движения.

Теперь когда наши breakpoints проставлены и все конфигурации настроены, перейдите снова в окно Run and Debug, рядом с зеленой кнопкой старта в выпадающем списке выберите конфигурацию Debug current file with rdbf и нажмите на зеленую кнопку старта.

Ваша программа должна запуститься и остановиться до первого вашего выставленного breakpoint. Сверху у вас появится меню управления работы программы. Давайте кратко пройдемся по некоторым пунктам его меню:

  1. Кнопка Continue - Возобновляет работу программы в обычном режиме до следующего breakpoint

  2. Кнопка Step Over - переводит выполнение программы на 1 шаг вперед. Это может быть следующая строчка кода, если это последняя строчка метода, то следующий шаг будет следующая строчка после места вызова этого метода.

  3. Кнопка Step Into - Позволяет 'провалиться' во внутрь метода. Если текущий шаг выполнения программы это вызов метода, то нажав на эту унопку вас перенесет внутрь самого метода, где вы сможете пошагово выполнять код внутри него. Если вы вместо этой нопки в этот момент нажмете Step Over, то вы передейте на следующую строчку после вызова этого метода.

  4. Кнопка Step Out - по аналогии с предыдущим вариантом, позволяет выйти из метода к месту его вызова

Помимо этого в момент выполнения программы слева в меню дебага вы можете наблюдать за состоянием переменных, которые находятся внутри текущего контекста. Контекстом может быть .rb файл, метод, класс и тд.

Возможно его использование покажется сложным по началу, но чем чаще вы им пользуетесь, тем быстрее находите ошибки в своем коде.

Задание bugfix

Есть следующий код:

def find_max(array)
  max = 0
  max_index = 0
  for i in 1..(array.length)
    if array[i] > max
      max = array[i]
      max_index = i
    end
  end
  [max, max_index]
end

array = [15, 10, -3, 7, 2, 1]
value, index = find_max(array)
puts "Max value: #{value}, index: #{index}" 

В данном коде есть ошибки. Найдите все ошибки с помощью дебага и исправьте их

Last updated