2012-01-22 14 views
6

Próbuję debugować prosty plik rubinowy w Aptana 3.Aptana 3 ruby ​​debugger - Wyjątek w pętli DebugThread: niezdefiniowana metoda `is_binary_data? '

class HelloWorld 

def initialize() 

end 

def greet() 
    puts "hello world" 
end 
end 

h=HelloWorld.new 
h.greet 

przerwania jest ustawiony na

h.greet 

po zacząłem debug, debugger rozpoczyna, ale kiedy próbuje zainicjować klasę rubinowy, debugger rozłączanie z komunikatem

Fast Debugger (ruby-debug-ide 0.4.9) listens on :54749 
Exception in DebugThread loop: undefined method `is_binary_data?' for "#<HelloWorld:0x85915fc>":String 

kiedy ustawić punkt przerwania do

h=HelloWorld.new 

debugger zaczyna, ale po tym, jak wszedł do initialize() konstruktora, to rozłącza z poprzedniej wiadomości

Moja lista perełki:

*** 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) 

Mam powodzeniem stosowane these instructions, aby rozwiązać problemy z debugowania, ale nadal otrzymano komunikat o wyjątku:

Każda odpowiedź jest mile widziana i rzuca światło na ten problem.

Dziękuję.

Odpowiedz

16

Moja wersja Ruby:

ruby 1.9.3p0 (2011-10-30) [i386-mingw32] 

Moja lista perełki:

... 
linecache19 (0.5.13) 
ruby-debug-base19 (0.11.26) 
ruby-debug-ide19 (0.4.12) 
... 

W Aptana 3, mam ten sam błąd.

Exception in DebugThread loop: undefined method `is_binary_data?' for "#<PostsController:0x65a8da8>":String 

Zobacz 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) 

Zobacz http://apidock.com/ruby/String/is_binary_data%3F.

Ciąg # is_binary_data?

Ta metoda jest przestarzała lub przeniesiona na najnowszą stabilną wersję. Ostatnia istniejąca wersja (v1_9_1_378) jest pokazana tutaj.

def is_binary_data? 
    (self.count("^ -~", "^\r\n").fdiv(self.size) > 0.3 || self.index("\x00")) unless empty? 
end 

Dodaj ten kod do xml_printer.rb (lub kod).

class String 
    def is_binary_data? 
    (self.count("^ -~", "^\r\n").fdiv(self.size) > 0.3 || self.index("\x00")) unless empty? 
    end 
end 

Dziękuję.

+0

Dziękuję, to załatwiło sprawę. Jeszcze raz bardzo dziękuję, bardzo mi to pomaga. – bodo

+0

Dodałem ten kod, ale nadal otrzymuję wyjątek w pętli DebugThread: undefined metoda 'is_binary_data? ' dla # . – Chris

+0

+1 Nie mogłem zrozumieć, dlaczego debugowanie pliku ruby ​​1.8.7 zadziałało, a Ruby 1.9.3 nie. Próbowałem ponownie zainstalować klejnoty debuggera, ale to nie zadziałało. Twoje rozwiązanie działa idealnie. – Kelvin

2

To działało dla mnie, upewnij się, że kod został dodany poza blokiem "module Debugger" w pliku xml_printer.rb. Po raz pierwszy dodałem kod do bloku modułów i otrzymałem ten sam wyjątek, ale umieszczenie go poza blokiem modułów usunęło wyjątek i umożliwiło kontrolę zmiennych.

+0

Wielkie dzięki! ! – Chris

+0

OMG DZIĘKI DUŻO !!! Zrobiłeś mój dzień – qwebek

2

Przez pewien czas korzystałem z rozwiązania exabug, ale ten okropny błąd w tak krytycznej funkcji języka programowania, jak debugowanie, nie pozwolił mi odpocząć, więc zbadałem go trochę bliżej i to właśnie odkryłem.

Po pierwsze, ruby-debug-ide zaimplementował problem z workaround, który powinien być dołączony do wersji beta klejnotu, abyś mógł spróbować. Zobacz here, aby dowiedzieć się, jakie wersje są dostępne. Najnowsza wersja beta rozbiła się jednak na moim komputerze i nie przetestowałem pozostałych.

Po drugie, problem istnieje, ponieważ is_binary_data? metoda has been moved do standardowej biblioteki o nazwie Syck. Dodanie require 'syck' do xml_printer.rb jest w moim przekonaniu czystszym rozwiązaniem niż te wprowadzone przez ruby-debug-ide i zaproponowane przez exabugs.

Jestem całkiem nowy dla Ruby, ale muszę powiedzieć, że błąd, który całkowicie uniemożliwia mi debugowanie czegokolwiek, który pozostaje stabilny w wersji stabilnej przez rok, nie robi dobrego wrażenia na temat całego języka.

+0

Twoje rozwiązanie dotyczące dodawania wymaga 'syck' do xml_printer.rb pracy DOBRZE! dziękuję, zgadzam się z Yuo, spędziłem pół dnia, aby debugowanie działało w NetBeans, to jest w porządku, życzę im lepszej i łatwiejszej debugowania konfiguracji i uruchamiania – qwebek