Книга: Программирование на языке Ruby
16.3. Работа с отладчиком Ruby
Разделы на этой странице:
16.3. Работа с отладчиком Ruby
Честно говоря, отладчик Ruby не особенно популярен. Лично я им не пользуюсь и встречал не так уж много людей, которые с ним работали. Но сознавать, что он есть, приятно. Ниже приводится краткое описание работы с ним.
Для вызова отладчика нужно просто затребовать библиотеку debug
— например, в командной строке:
ruby -rdebug rayfile.rb
В ответ на приглашение вида (rdb:1
) вы можете вводить различные команды, например list
для получения текста всей программы или ее части, step для пошагового исполнения метода и т.д. Некоторые команды перечислены в таблице 16.1 (полужирным шрифтом набраны сокращения).
Таблица 16.1. Наиболее употребительные команды отладчика
Команда | Описание |
---|---|
break |
Установить точку прерывания или получить их список. |
delete |
Удалить все или некоторые точки прерывания. |
catch |
Установить точку перехвата или получить их список. |
step |
Вход внутрь метода. |
next |
Перейти к следующей строке (без захода внутрь метода). |
help |
Справка (вывести список всех команд). |
quit |
Выйти из отладчика. |
В листинге 16.4 приведен код простой программы (даже слишком простой, чтобы ее отлаживать).
Листинг 16.4. Простая программа для демонстрации работы отладчика
STDOUT.sync = true
def palindrome?(word)
word == word.reverse
end
def signature(w)
w.split("").sort.join
end
def anagrams?(w1,w2)
signature(w1) == signature(w2)
end
print "Give me a word: "
w1 = gets.chomp
print "Give me another word: "
w2 = gets.chomp
verb = palindrome?(w1) ? "is" : "is not"
puts "'#{w1}' #{verb} a palindrome."
verb = palindrome?(w2) ? "is" : "is not"
puts "'#{w2}' #{verb} a palindrome."
verb = anagrams?(w1,w2) ? "are" : "are not"
puts "'{w1}' and '#{w2}' #{verb} anagrams."
В листинге 16.5 показан полный сеанс отладки. Некоторые места не слишком понятны, потому что на консоль выводят данные и сама программа, и отладчик.
Листинг 16.5. Сеанс отладки простой программы
$ ruby -rdebug db.rb
Debug.rb
Emacs support available.
db.rb:1:STDOUT.sync = true
(rdb:1) b palindrome?
Set breakpoint 1 at db.rb:palindrome?
(rdb:1) b anagrams?
Set breakpoint 2 at db.rb:anagrams?
(rdb:1) b
Breakpoints:
1 db.rb:palindrome?
2 db.rb:anagrams?
(rdb:1) n
db.rb:3:def palindrome?(word)
(rdb:1) n
db.rb:7:def signature(w)
(rdb:1) n
db.rb:11:def anagrams?(w1,w2)
(rdb:1) n
db.rb:15:print "Give me a word: "
(rdb:1) n
Give me a word: db.rb:16:w1 = gets.chomp
(rdb:1) live
db.rb:16:undefined local variable or method 'live' for main:Object
(rdb:1) n
live
db.rb:18:print "Give me another word: "
(rdb:1) n
Give me another word: db.rb:19:w2 = gets.chomp
(rdb:1) n
evil
db.rb:21:verb = palindrome?(w1) ? "is" : "is not"
(rdb:1) с
Breakpoint 1, palindrome? at db.rb:palindrome?
db.rb:3:def palindrome?(word)
(rdb:1) n
db.rb: 4: word == word.reverse
(rdb:1) word
"live"
(rdb:1) n
db.rb: 22: puts "'#{w1}' #{verb} a palindrome."
(rdb:1) verb "is not"
(rdb:1) n
'live' is not a palindrome.
db.rb:24:verb = palindrome?(w2) ? "is" : "is not"
(rdb:1) n
db.rb:24:verb = palindrome?(w2) ? "is" : "is not"
(rdb:1) n
Breakpoint 1, palindrome? at db.rb:palindrome?
db.rb:3:def palindrome?(word)
(rdb:1) n
db.rb:4: word == word.reverse
(rdb:1) c
'evil' is not a palindrome.
Breakpoint 2, anagrams? at db.rb:anagrams?
db.rb:11:def anagrams?(w1,w2)
(rdb:1) n
db.rb:12: signature(w1) == signature(w2)
(rdb:1) n
db.rb:28:puts "'#{w1}' and '#{w2}' #{verb} anagrams."
(rdb:1) verb
"are"
(rdb:1) c
'live' and 'evil' are anagrams.
Если вы затребуете другие библиотеки, то, возможно, придется в самом начале «перешагнуть» через несколько методов. Я рекомендую перед началом отладки установить где-нибудь в собственном коде точку прерывания, а потом выполнить команду continue
для останова в этой точке.
Отладчик понимает и много других команд. Можно просматривать стек вызовов и перемещаться по нему. Можно «наблюдать» за выражениями и автоматически останавливать выполнение, как только выражение изменится. Можно добавлять выражения в «отображаемый список». Поддерживается работа с несколькими потоками и переключение между ними.
Вероятно, полной и качественной документации вы нигде не найдете. Если возникнет такая необходимость, рекомендуется обратиться к оперативной справке и действовать методом проб и ошибок.
Современные отладчики имеют графический интерфейс. Если вам необходим такой инструмент, загляните в главу 21, где обсуждаются интегрированные среды разработки для Ruby.
- Глава 1. Обзор Ruby
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- 1.2. Базовый синтаксис и семантика Ruby
- Лекция 15. Работа с базами данных
- Работа с ресурсами локальной сети
- Эффективная работа с временными файлами сортировки
- Ускоренная работа с индексами
- HR-брендинг: Работа с поколением Y, новые инструменты для коммуникации, развитие корпоративной культуры и еще 9 эффектив...
- Безопасная работа с внешними таблицами
- Работа со строками
- 9.2. Работа прокси-сервера
- 3. Заработок для фотографов: заработать на фото – сайты фотобанков