Aptana 3 ruby​​调试器 – DebugThread循环中的exception:未定义的方法`is_binary_data?’

我正在尝试在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 "#":String 

当我设置断点时

 h=HelloWorld.new 

调试器启动,但在我进入initialize()构造函数后,它与先前的消息断开连接

我的gem列表:

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

我已成功应用这些指令 ,以解决调试问题,但我仍然收到此exception消息

任何答案都是受欢迎的,这可以解决这个问题。

谢谢。

我的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 "#":String 

请参阅ruby-debug-ide19-0.4.12 / xml_printer.rb。

  value_str = "[Binary Data]" if value_str.is_binary_data? print("", 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 。

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

谢谢。

它对我有用,确保代码添加到xml_printer.rb中的“模块调试器”块之外。 我第一次在模块块中添加了代码并得到了相同的exception,但是将它放在模块块之外就摆脱了exception并允许检查变量。

我正在使用exabug的解决方案一段时间,但是在调试等编程语言这样一个关键特性中的这个可怕的错误并没有让我rest,所以我调查了一点,这就是我发现的。

首先, ruby-debug-ide实现了问题的解决方法 ,应该包含在gem的beta版本中,以便您可以尝试一下。 请参阅此处以了解可用的版本。 不过,最新的测试版在我的电脑上崩溃了,而我还没有测试过其余部分。

其次,问题是因为is_binary_data? 方法已移至名为Syck的标准库。 因此,在xml_printer.rb添加require 'syck'是一个比ruby-debug-ide实现并由exabugs提出的更清晰的解决方案。

我对Ruby很陌生,但我必须说一个完全阻止我调试任何东西的bug,它在稳定版本中保持一年没有固定,并没有给整个语言留下很好的印象。