6

Aptana 3 で単純な ruby​​ ファイルをデバッグしようとしています。

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)

これらの手順を正常に適用してデバッグの問題を解決しましたが、まだこの例外メッセージが表示されます

この問題に光を当てる答えは大歓迎です。

ありがとうございました。

4

3 に答える 3

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

ありがとうございました。

于 2012-01-28T06:35:08.867 に答える
2

私はしばらくexabugのソリューションを使用していましたが、デバッグなどのプログラミング言語の重要な機能のこのひどいバグは私を休ませることができなかったので、もう少し詳しく調べてみました。

まず、問題の回避策ruby-debug-ideを実装しました。これは、gemのベータ版に含まれている必要があるため、試してみることができます。利用可能なバージョンについては、こちらをご覧ください。ただし、最新のベータ版が私のコンピューターでクラッシュしました。残りのベータ版はテストしていません。

次に、is_binary_data?メソッドがSyckと呼ばれる標準ライブラリに移動されたために問題が発生します。したがって、に追加require 'syck'することは、 exabugsによってxml_printer.rb実装および提案されたソリューションよりもクリーンなソリューションであると私は考えています。ruby-debug-ide

私はRubyにまったく慣れていませんが、1年間安定したバージョンで修正されないままであるため、デバッグを完全に妨げるバグは、言語全体についてあまり良い印象を与えません。

于 2012-12-03T21:38:44.940 に答える
2

コードがxml_printer.rbの「module Debugger」ブロックの外に追加されていることを確認してください。最初にモジュール ブロック内にコードを追加したところ、同じ例外が発生しましたが、モジュール ブロックの外に配置すると、例外がなくなり、変数を検査できるようになりました。

于 2012-02-27T17:51:55.517 に答える