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

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

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

于 2012-02-27T17:51:55.517 回答
2

我使用 exabug 的解决方案有一段时间了,但是像调试这样的编程语言的关键特性中的这个可怕的错误并没有让我休息,所以我更仔细地调查了它,这就是我发现的。

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

其次,问题的存在是因为is_binary_data?方法已移至名为 Syck 的标准库。因此,在我看来,添加require 'syck'toxml_printer.rb是一种比ruby-debug-ideexabugs 实现和提议的解决方案更清洁的解决方案。

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

于 2012-12-03T21:38:44.940 回答