2012-01-22 17 views
6

Tôi đang cố gắng để gỡ lỗi tập tin ruby ​​đơn giản trong Aptana 3.Aptana 3 ruby ​​debugger - Ngoại lệ trong vòng lặp DebugThread: phương thức undefined `is_binary_data? '

class HelloWorld 

def initialize() 

end 

def greet() 
    puts "hello world" 
end 
end 

h=HelloWorld.new 
h.greet 

breakpoint được thiết lập để

h.greet 

sau khi tôi bắt đầu gỡ lỗi, gỡ rối bắt đầu, nhưng khi nó cố gắng để khởi tạo lớp ruby, debugger ngắt kết nối với thông điệp

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

khi tôi đặt breakpoint để

h=HelloWorld.new 

debugger bắt đầu, nhưng sau khi tôi bước vào initialize() constructor, nó ngắt kết nối với thông báo trước đó

danh sách đá quý của tôi:

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

tôi đã áp dụng thành công these instructions, để giải quyết vấn đề với gỡ lỗi nhưng tôi vẫn nhận được thông báo ngoại lệ này

Bất kỳ câu trả lời nào đều được chào đón làm sáng tỏ vấn đề này.

Cảm ơn bạn.

Trả lời

16

ruby ​​My phiên bản:

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

My danh sách đá quý:

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

Trong Aptana 3, tôi đã cùng một lỗi.

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

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

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

Chuỗi # is_binary_data?

Phương pháp này không được chấp nhận hoặc được chuyển sang phiên bản ổn định mới nhất. Phiên bản hiện tại cuối cùng (v1_9_1_378) được hiển thị tại đây.

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

Thêm mã này để xml_printer.rb (hoặc mã của bạn).

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

Cảm ơn bạn.

+0

Cảm ơn bạn đã thực hiện điều đó. Một lần nữa cảm ơn bạn rất nhiều, nó giúp tôi rất nhiều. – bodo

+0

Tôi đã thêm mã này, nhưng vẫn nhận được ngoại lệ trong vòng lặp DebugThread: phương thức undefined 'is_binary_data? ' cho # . – Chris

+0

+1 Tôi không thể hiểu tại sao ruby ​​1.8.7 gỡ lỗi được làm việc trong khi ruby ​​1.9.3 thì không. Đã thử cài đặt lại đá quý của trình gỡ lỗi, nhưng điều đó không hiệu quả. Giải pháp của bạn hoạt động hoàn hảo. – Kelvin

2

Nó làm việc cho tôi, đảm bảo mã được thêm bên ngoài khối "Mô-đun gỡ lỗi" trong xml_printer.rb. Tôi đã thêm mã bên trong khối mô-đun lần đầu tiên và có ngoại lệ tương tự, nhưng đặt nó bên ngoài khối mô-đun đã loại bỏ ngoại lệ và cho phép các biến được kiểm tra.

+0

Cảm ơn rất nhiều! ! – Chris

+0

OMG THANKS A LOT !!! Bạn đã thực hiện ngày của tôi – qwebek

2

Tôi đã sử dụng giải pháp exabug trong một thời gian nhưng lỗi khủng khiếp này trong một tính năng quan trọng của ngôn ngữ lập trình như gỡ lỗi không cho phép tôi nghỉ ngơi, vì vậy tôi đã nghiên cứu kỹ hơn một chút và đó là những gì tôi phát hiện ra.

Trước hết, ruby-debug-ide đã triển khai workaround cho sự cố, cần được bao gồm trong các phiên bản beta của đá quý để bạn có thể thử. Xem here để tìm hiểu phiên bản nào có sẵn. Tuy nhiên, bản beta mới nhất đã bị lỗi trên máy tính của tôi và tôi chưa thử nghiệm phần còn lại.

Thứ hai, vấn đề tồn tại vì phương pháp is_binary_data?has been moved đến thư viện chuẩn được gọi là Syck. Vì vậy, việc thêm require 'syck' vào xml_printer.rb là ý kiến ​​của tôi về một giải pháp sạch hơn cả giải pháp được triển khai bởi ruby-debug-ide và được đề xuất bởi các exabugs.

Tôi khá mới đối với Ruby nhưng tôi phải nói một lỗi hoàn toàn ngăn cản tôi gỡ lỗi bất cứ thứ gì, vẫn chưa được cài đặt trong các phiên bản ổn định trong một năm, không tạo ấn tượng tốt về toàn bộ ngôn ngữ.

+0

Giải pháp của bạn về việc thêm yêu cầu 'syck' vào xml_printer.rb làm việc TỐT! cảm ơn, tôi đồng ý với yuo, tôi đã dành nửa ngày để thực hiện gỡ lỗi chạy trong NetBeans, thats owfull, tôi muốn họ làm một cách dễ dàng hơn để gỡ lỗi cài đặt và chạy – qwebek

Các vấn đề liên quan