Aptana 3 Ruby调试器 - DebugThread循环中的异常:未定义方法'is_binary_data?'

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)

我已经成功地应用了这些说明,来解决调试问题,但我仍然收到了这个异常消息。

欢迎任何回答,可以为这个问题提供一些线索。

谢谢。

3个回答

16

我的 Ruby 版本:

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

我的gem列表:

...
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
感谢您。

我已经添加了这段代码,但仍然在DebugThread循环中遇到异常:undefined method `is_binary_data?' for #String:0x22efb10。 - Chris
+1 我不明白为什么 Ruby 1.8.7 能够调试,而 Ruby 1.9.3 却不能。尝试重新安装调试器宝石,但没有用。你的解决方案完美地解决了这个问题。 - Kelvin
1
我将String类片段添加到了我的environment.rb中,一切正常。 - Christopher Johnson

2

我一段时间以来一直在使用exabug的解决方案,但这个可怕的bug影响了一个编程语言如调试这样关键的功能,让我无法安心,因此我仔细调查了一下,以下是我的发现。

首先,ruby-debug-ide 实现了一个解决方法来解决这个问题,它应该包含在gem的beta版本中,所以您可以试试。请参见这里查看可用的版本。然而,最新的beta版本在我的电脑上崩溃了,我没有测试其他版本。

其次,这个问题存在的原因是因为 is_binary_data? 方法已经被移动到了一个名为 Syck 的标准库中。因此,将 require 'syck' 添加到 xml_printer.rb 中是我认为比 ruby-debug-ide 实现的方法以及exabug提出的方法更为简洁的解决方案。

我对Ruby还不是很熟悉,但我必须说,一个完全阻止我调试任何东西的bug,在稳定版本中仍未被修复一年之久,对整个语言产生了非常不好的印象。


你在 xml_printer.rb 中添加 require 'syck' 的解决方案非常好!谢谢。我同意你的观点,我花了半天时间在 NetBeans 上进行调试,这太糟糕了。我希望他们能提供更好、更简单的调试设置和运行方式。 - qwebek

2

对我来说起作用了,请确保代码是添加在xml_printer.rb文件的“module Debugger”块之外。第一次我将代码放在模块块内,得到了相同的异常,但是将其放在模块块之外就消除了异常并允许变量被检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接