Рубиновый отладчик Aptana 3 — исключение в цикле DebugThread: неопределенный метод is_binary_data?

Я пытаюсь отладить простой рубиновый файл в Aptana 3.

class HelloWorld
  
def initialize()
    
end
  
def greet()
  puts "hello world"
end
end

h=HelloWorld.new
h.greet

точка останова установлена ​​на

h.greet

после того, как я начал отладку, запускается отладчик, но когда он пытается инициализировать рубиновый класс, отладчик отключается с сообщением

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)

Я успешно применил эти инструкции, чтобы решить проблемы с отладкой, но я все еще получаю это сообщение об исключении

Приветствуется любой ответ, который проливает свет на эту проблему.

Спасибо.


person bodo    schedule 22.01.2012    source источник


Ответы (3)


Моя рубиновая версия:

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

ruby 1.9.3p0 (2011-10-30) [i386-mingw32]
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

Спасибо.

person exabugs    schedule 28.01.2012
comment
Спасибо, это помогло. Еще раз большое спасибо, это мне очень помогает. - person bodo; 05.02.2012
comment
Я добавил этот код, но все еще получаю исключение в цикле DebugThread: неопределенный метод `is_binary_data?' для #‹String:0x22efb10›. - person Chris; 24.02.2012
comment
+1 Я не мог понять, почему отладка ruby ​​​​1.8.7 работала, а ruby ​​1.9.3 - нет. Пробовал переустанавливать гемы отладчика, но это не сработало. Ваше решение сработало отлично. - person Kelvin; 16.03.2012
comment
Я добавил фрагмент класса String в свой файл environment.rb, и все работает. - person Christopher Johnson; 27.07.2012

У меня это сработало, убедитесь, что код добавлен за пределы блока «Отладчик модуля» в xml_printer.rb. Я добавил код внутри блока модуля в первый раз и получил такое же исключение, но размещение его вне блока модуля избавило от исключения и позволяет проверять переменные.

person Wai    schedule 27.02.2012

Я использовал решение exabug некоторое время, но эта ужасная ошибка в такой важной функции языка программирования, как отладка, не давала мне покоя, поэтому я исследовал ее немного ближе, и вот что я обнаружил.

Во-первых, ruby-debug-ide реализовал обходной путь для решения проблемы, который должен быть включен в бета-версии драгоценного камня, так что вы можете попробовать их. См. здесь, чтобы узнать, какие версии доступны. Однако последняя бета-версия дала сбой на моем компьютере, и я не тестировал остальные.

Во-вторых, проблема существует потому, что метод is_binary_data? был перемещен в стандартную библиотеку Syck. Таким образом, добавление require 'syck' к xml_printer.rb, на мой взгляд, более чистое решение, чем решение, реализованное ruby-debug-ide, и предложенное exabugs.

Я совсем новичок в Ruby, но должен сказать, что ошибка, которая полностью мешает мне что-либо отлаживать, которая не исправлена ​​в стабильных версиях в течение года, не производит очень хорошего впечатления о языке в целом.

person kamilk    schedule 03.12.2012
comment
Ваше решение по добавлению require 'syck' в xml_printer.rb работает ХОРОШО! спасибо, я согласен с вами, я потратил полдня, чтобы запустить отладку в NetBeans, это очень хорошо, я бы хотел, чтобы они сделали более простой способ настройки и запуска отладки. - person qwebek; 30.06.2013