2012-01-22 3 views
6

Я пытаюсь отлаживать простой файл рубин в Aptana 3.Отладчик Aptana 3 ruby ​​- Исключение из цикла DebugThread: неопределенный метод `is_binary_data? '

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) 

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

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

спасибо.

ответ

16

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

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.

String # 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 

спасибо.

+0

Спасибо, что сделал трюк. Еще раз большое спасибо, мне это очень помогает. – bodo

+0

Я добавил этот код, но все равно получаю исключение в цикле DebugThread: undefined method 'is_binary_data? ' для # . – Chris

+0

+1 Я не мог понять, почему ruby ​​1.8.7 debug работал, пока ruby ​​1.9.3 этого не делал. Попытался переустановить камни отладчика, но это не сработало. Ваше решение отлично работало. – Kelvin

2

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

+0

Спасибо большое! ! – Chris

+0

OMG СПАСИБО МНОГО !!! Вы сделали мой день – qwebek

2

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

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

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

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

+0

Ваше решение при добавлении требует «syck» для работы xml_printer.rb WELL! спасибо, я согласен с yuo, я потратил полдня на то, чтобы сделать отладку запущенной в NetBeans, thats owfull, я хочу, чтобы они сделали лучший способ отладки настройки и запуска – qwebek