Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

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.

16.4. Использование irb в качестве отладчика

Библиотеку

ruby-breakpoint
написал Флориан Гросс (Florian Gross). Этот великолепный, несмотря на малый объем, инструмент позволяет расставлять в программе точки прерывания методом
breakpoint
. Когда в процессе исполнения встречается точка прерывания, запускается сеанс
irb
(программа интерактивной работы с Ruby
irb
подробно рассматривается в главе 21).

Эта библиотека не входит в стандартный дистрибутив. Установить ее можно, например, выполнив команду

gem install ruby-breakpoint
.

Внесем несколько изменений в программу из листинга 16.4. Поместим в начало директиву

require 'breakpoint'
и добавим вызов метода
breakpoint
после обоих обращений к
gets
:

require 'breakpoint'

# ...

w2 = gets.chomp

breakpoint

# ...

Теперь запустим ее. В следующем протоколе сеанса показано, как мы входим в

irb
, после чего можем делать все что угодно — в частности, вызывать ранее определенные методы и изменять значения переменных.

$ ruby myprog.rb

Give me a word: parental

Give me another word: prenatal

Executing break point at myprog.rb:23

irb(main):001:0> w1

Поделиться:
Популярные книги

Запечатанный во тьме. Том 1. Тысячи лет кача

NikL
1. Хроники Арнея
Фантастика:
уся
эпическая фантастика
фэнтези
5.00
рейтинг книги
Запечатанный во тьме. Том 1. Тысячи лет кача

Я все еще князь. Книга XXI

Дрейк Сириус
21. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я все еще князь. Книга XXI

Я еще князь. Книга XX

Дрейк Сириус
20. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще князь. Книга XX

Ренегат космического флота

Борчанинов Геннадий
4. Звезды на погонах
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Ренегат космического флота

Тринадцатый XIII

NikL
13. Видящий смерть
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Тринадцатый XIII

Солнечный флот

Вайс Александр
4. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Солнечный флот

Дважды одаренный. Том VI

Тарс Элиан
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
Дважды одаренный. Том VI

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Боярич Морозов

Шелег Дмитрий Витальевич
3. Наследник старого рода
Фантастика:
героическая фантастика
боевая фантастика
альтернативная история
7.12
рейтинг книги
Боярич Морозов

Барон Дубов 2

Карелин Сергей Витальевич
2. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 2

Бастард Императора. Том 3

Орлов Андрей Юрьевич
3. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 3

Глэрд VIII: Базис 2

Владимиров Денис
8. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Глэрд VIII: Базис 2

Кодекс Охотника. Книга XVIII

Винокуров Юрий
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVIII

Император Пограничья 6

Астахов Евгений Евгеньевич
6. Император Пограничья
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Император Пограничья 6