Я пытаюсь отлаживать простой файл ruby в Aptana 3.
class HelloWorld
def initialize()
end
def greet()
puts "hello world"
end
end
h=HelloWorld.new
h.greet
точка останова установлена на
h.greet
после того, как я начал отлаживать, начинается отладчик, но когда он пытается инициализировать класс ruby, отладчик отключается с сообщением
Fast Debugger (ruby-debug-ide 0.4.9) listens on :54749
Exception in DebugThread loop: undefined method `is_binary_data?' for "#<HelloWorld:0x85915fc>":String
когда я установил точку останова на
h=HelloWorld.new
начинается отладчик, но после того, как я вступил в конструктор initialize()
, он отключается с предыдущим сообщением
Список моих драгоценных камней:
*** LOCAL GEMS ***
archive-tar-minitar (0.5.2)
bigdecimal (1.1.0)
columnize (0.3.6)
io-console (0.3)
json (1.5.4)
linecache19 (0.5.13)
minitest (2.5.1)
rake (0.9.2.2)
rdoc (3.9.4)
ruby-debug-base19 (0.11.26)
ruby-debug-ide19 (0.4.12)
ruby-debug19 (0.11.6)
ruby_core_source (0.1.5)
Я успешно применил эти инструкции, чтобы решить проблемы с отладкой, но я все еще получил это сообщение об исключении
Любой ответ приветствуется, который проливает свет на эту проблему.
Спасибо.
Ответ 1
Моя рубиновая версия:
ruby 1.9.3p0 (2011-10-30) [i386-mingw32]
Список моих драгоценных камней:
...
linecache19 (0.5.13)
ruby-debug-base19 (0.11.26)
ruby-debug-ide19 (0.4.12)
...
В Aptana 3 у меня такая же ошибка.
Exception in DebugThread loop: undefined method `is_binary_data?' for "#<PostsController:0x65a8da8>":String
См. ruby-debug-ide19-0.4.12/xml_printer.rb.
value_str = "[Binary Data]" if value_str.is_binary_data?
print("<variable name=\"%s\" kind=\"%s\" value=\"%s\" type=\"%s\" hasChildren=\"%s\" objectId=\"%#+x\"/>",
CGI.escapeHTML(name), kind, CGI.escapeHTML(value_str), value.class,
has_children, value.respond_to?(:object_id) ? value.object_id : value.id)
См. http://apidock.com/ruby/String/is_binary_data%3F.
Строка # is_binary_data?
Этот метод устарел или перемещен в последней стабильной версии. Здесь показана последняя существующая версия (v1_9_1_378).
def is_binary_data?
( self.count( "^ -~", "^\r\n" ).fdiv(self.size) > 0.3 || self.index( "\x00" ) ) unless empty?
end
Добавьте этот код в xml_printer.rb(или в свой код).
class String
def is_binary_data?
( self.count( "^ -~", "^\r\n" ).fdiv(self.size) > 0.3 || self.index( "\x00" ) ) unless empty?
end
end
Спасибо.
Ответ 2
Это сработало для меня, убедитесь, что код добавлен за пределами блока "модуль отладчика" в xml_printer.rb. Я добавил код внутри блока модуля в первый раз и получил одно и то же исключение, но его размещение за пределами модуля блокировало исключение и позволяет проверять переменные.
Ответ 3
Я использовал exabug-решение какое-то время, но эта ужасная ошибка в такой важной функции языка программирования, как отладка, не позволяла мне отдыхать, поэтому я исследовал ее немного ближе и что я узнал.
Во-первых, ruby-debug-ide
реализовал обходной путь к проблеме, который должен быть включен в бета-версии драгоценного камня, чтобы вы могли дать им пытаться. См. здесь, чтобы узнать, какие версии доступны. Однако последняя бета-версия разбилась на моем компьютере, и я не тестировал остальных.
Во-вторых, проблема существует, потому что метод is_binary_data?
был перенесен в стандартную библиотеку Syck. Поэтому добавление require 'syck'
в xml_printer.rb
на мой взгляд является более чистым решением, чем тот, который реализован ruby-debug-ide
и предложенный exabugs.
Я совершенно новый для Ruby, но я должен сказать, что ошибка, которая полностью мешает мне отлаживать что-либо, которое остается незафиксированным в стабильных версиях в течение года, не производит очень хорошего впечатления обо всем языке.