Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
В листинге 16.4 приведен код простой программы (даже слишком простой, чтобы ее отлаживать).
STDOUT.sync = truedef palindrome?(word) word == word.reverseenddef signature(w) w.split("").sort.joinenddef anagrams?(w1,w2) signature(w1) == signature(w2)endprint "Give me a word: "w1 = gets.chompprint "Give me another word: "w2 = gets.chompverb = 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 показан полный сеанс отладки. Некоторые места не слишком понятны, потому что на консоль выводят данные и сама программа, и отладчик.
$ ruby -rdebug db.rbDebug.rbEmacs 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) bBreakpoints: 1 db.rb:palindrome? 2 db.rb:anagrams?(rdb:1) ndb.rb:3:def palindrome?(word)(rdb:1) ndb.rb:7:def signature(w)(rdb:1) ndb.rb:11:def anagrams?(w1,w2)(rdb:1) ndb.rb:15:print "Give me a word: "(rdb:1) nGive me a word: db.rb:16:w1 = gets.chomp(rdb:1) livedb.rb:16:undefined local variable or method 'live' for main:Object(rdb:1) nlivedb.rb:18:print "Give me another word: "(rdb:1) nGive me another word: db.rb:19:w2 = gets.chomp(rdb:1) nevildb.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) ndb.rb: 4: word == word.reverse(rdb:1) word"live"(rdb:1) ndb.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) ndb.rb:24:verb = palindrome?(w2) ? "is" : "is not"(rdb:1) nBreakpoint 1, palindrome? at db.rb:palindrome?db.rb:3:def palindrome?(word)(rdb:1) ndb.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) ndb.rb:12: signature(w1) == signature(w2)(rdb:1) ndb.rb:28:puts "'#{w1}' and '#{w2}' #{verb} anagrams."(rdb:1) verb"are"(rdb:1) c'live' and 'evil' are anagrams.Если вы затребуете другие библиотеки, то, возможно, придется в самом начале «перешагнуть» через несколько методов. Я рекомендую перед началом отладки установить где-нибудь в собственном коде точку прерывания, а потом выполнить команду
continueОтладчик понимает и много других команд. Можно просматривать стек вызовов и перемещаться по нему. Можно «наблюдать» за выражениями и автоматически останавливать выполнение, как только выражение изменится. Можно добавлять выражения в «отображаемый список». Поддерживается работа с несколькими потоками и переключение между ними.
Вероятно, полной и качественной документации вы нигде не найдете. Если возникнет такая необходимость, рекомендуется обратиться к оперативной справке и действовать методом проб и ошибок.
Современные отладчики имеют графический интерфейс. Если вам необходим такой инструмент, загляните в главу 21, где обсуждаются интегрированные среды разработки для Ruby.
