如何使用eclipse调试jRuby?

时间:2021-02-16 17:09:32

This sounds like a fairly trivial question, but I've been struggling with it for ages, abandoning Ruby and coming back to it. I am a Java/Eclipse person trying to learn Ruby, and so I would like to debug jRuby/Rails using some Eclipse plugin, on my Win 7, 64-bit computer. How come it is so hard? I could not find a step-by-step instruction (e.g. install this plug-in, this version of jRuby, install these gems, tweak these settings). In the absence of that, I am doing hit-and-miss, and everything I do seems to result in bizarre errors.

这听起来像是一个相当微不足道的问题,但我已经苦苦挣扎了很长时间,放弃了Ruby并回归它。我是一个尝试学习Ruby的Java / Eclipse人员,因此我想在我的Win 7,64位计算机上使用一些Eclipse插件调试jRuby / Rails。怎么这么难?我找不到一步一步的指令(例如安装此插件,此版本的jRuby,安装这些宝石,调整这些设置)。如果没有这个,我正在做点什么,我所做的一切似乎都会导致奇怪的错误。

At this point in time, I am trying to use EasyEclipse (is it a good choice?). I found that the default installation (into Program Files) is not a good idea and installed it at a path with no spaces; same with jRuby. I installed two debug gems (from the top of my head, gem install ruby-debug and gem install ruby-debug-ide), then did "gem update". I am running the latest stable version of EasyEclipse and jRuby.

此时,我正在尝试使用EasyEclipse(这是一个不错的选择吗?)。我发现默认安装(进入Program Files)并不是一个好主意,并将其安装在没有空格的路径上;和jRuby一样。我安装了两个调试宝石(从我的头顶,gem install ruby​​-debug和gem install ruby​​-debug-ide),然后做了“gem update”。我正在运行EasyEclipse和jRuby的最新稳定版本。

I am able to run a Ruby program. However, when I put on a breakpoint and try debug, debugger gets stuck at "Launching(95%)" and Console shows:

我能够运行Ruby程序。但是,当我设置断点并尝试调试时,调试器陷入“启动(95%)”并且控制台显示:

ruby 1.9.3 debugger listens on port 52188 undefined method `critical=' for Thread:Class

ruby 1.9.3调试器侦听端口52188未定义方法`critical ='for Thread:Class

That, when I turn on "Use ruby-debug library" library in preferences, I get this:

那个,当我打开首选项中的“使用ruby-debug库”库时,我得到了这个:

   Fast Debugger (ruby-debug-ide 0.4.18, ruby-debug-base 0.10.3.2) listens on 127.0.0.1:52819
Hello, world!
Hello, world!2
Hello, world!3
Context.java:407:in `contextCopyLocals': java.lang.NoSuchMethodError: org.jruby.runtime.DynamicScope.getEvalScope()Lorg/jruby/runtime/DynamicScope;
    from Context.java:284:in `frame_locals'
    from Context$INVOKER$i$1$0$frame_locals_DBG.gen:-1:in `call'
    from JavaMethod.java:347:in `call'
    from CachingCallSite.java:326:in `cacheAndCall'
    from CachingCallSite.java:170:in `call'
    from CallOneArgNode.java:57:in `interpret'
    from LocalAsgnNode.java:123:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from BlockNode.java:71:in `interpret'
    from ASTInterpreter.java:74:in `INTERPRET_METHOD'
    from InterpretedMethod.java:139:in `call'
    from CachingCallSite.java:306:in `cacheAndCall'
    from CachingCallSite.java:136:in `call'
    from CallNoArgNode.java:60:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from IfNode.java:118:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from IfNode.java:116:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from BlockNode.java:71:in `interpret'
    from ASTInterpreter.java:112:in `INTERPRET_BLOCK'
    from Interpreted19Block.java:206:in `evalBlockBody'
    from Interpreted19Block.java:157:in `yield'
    from Block.java:142:in `yield'
    from RubyArray.java:1610:in `eachCommon'
    from RubyArray.java:1617:in `each'
    from RubyArray$INVOKER$i$0$0$each_DBG.gen:-1:in `call'
    from CachingCallSite.java:143:in `callBlock'
    from CachingCallSite.java:154:in `callIter'
    from CallNoArgBlockNode.java:64:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from ASTInterpreter.java:112:in `INTERPRET_BLOCK'
    from Interpreted19Block.java:206:in `evalBlockBody'
    from Interpreted19Block.java:157:in `yield'
    from Block.java:142:in `yield'
    from RubyContinuation.java:107:in `enter'
    from RubyKernel.java:1261:in `rbCatch19Common'
    from RubyKernel.java:1254:in `rbCatch19'
    from RubyKernel$INVOKER$s$rbCatch19_DBG.gen:-1:in `call'
    from CachingCallSite.java:177:in `callBlock'
    from CachingCallSite.java:188:in `callIter'
    from FCallOneArgBlockNode.java:34:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from BlockNode.java:71:in `interpret'
    from WhileNode.java:131:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from BlockNode.java:71:in `interpret'
    from RescueNode.java:222:in `executeBody'
    from RescueNode.java:117:in `interpret'
    from ASTInterpreter.java:74:in `INTERPRET_METHOD'
    from InterpretedMethod.java:139:in `call'
    from CachingCallSite.java:306:in `cacheAndCall'
    from CachingCallSite.java:136:in `call'
    from CallNoArgNode.java:60:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from BlockNode.java:71:in `interpret'
    from ASTInterpreter.java:74:in `INTERPRET_METHOD'
    from InterpretedMethod.java:268:in `call'
    from CachingCallSite.java:366:in `cacheAndCall'
    from CachingCallSite.java:238:in `call'
    from FCallThreeArgNode.java:40:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from BlockNode.java:71:in `interpret'
    from ASTInterpreter.java:74:in `INTERPRET_METHOD'
    from InterpretedMethod.java:268:in `call'
    from CachingCallSite.java:366:in `cacheAndCall'
    from CachingCallSite.java:238:in `call'
    from CallThreeArgNode.java:61:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from ASTInterpreter.java:74:in `INTERPRET_METHOD'
    from InterpretedMethod.java:112:in `call'
    from InterpretedMethod.java:126:in `call'
    from RubyClass.java:722:in `finvoke'
    from Helpers.java:486:in `invoke'
    from RubyBasicObject.java:367:in `callMethod'
    from DebugEventHook.java:566:in `callAtLine'
    from DebugEventHook.java:553:in `callAtLine'
    from DebugEventHook.java:190:in `processEvent'
    from DebugEventHook.java:97:in `eventHandler'
    from EventHook.java:30:in `event'
    from Ruby.java:2882:in `callEventHooks'
    from ASTInterpreter.java:239:in `callTraceFunction'
    from NewlineNode.java:101:in `interpret'
    from BlockNode.java:71:in `interpret'
    from ASTInterpreter.java:103:in `INTERPRET_CLASS'
    from ASTInterpreter.java:280:in `evalClassDefinitionBody'
    from ClassNode.java:138:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from RootNode.java:129:in `interpret'
    from ASTInterpreter.java:121:in `INTERPRET_ROOT'
    from Ruby.java:834:in `runInterpreter'
    from Ruby.java:2674:in `loadFile'
    from ExternalScript.java:66:in `load'
    from LoadService.java:359:in `load'
    from Debugger.java:137:in `load'
    from RubyDebugger.java:207:in `debug_load'
    from RubyDebugger$INVOKER$s$0$2$debug_load_DBG.gen:-1:in `call'
    from DynamicMethod.java:225:in `call'
    from DynamicMethod.java:221:in `call'
    from CachingCallSite.java:366:in `cacheAndCall'
    from CachingCallSite.java:238:in `call'
    from FCallThreeArgNode.java:40:in `interpret'
    from LocalAsgnNode.java:123:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from BlockNode.java:71:in `interpret'
    from ASTInterpreter.java:74:in `INTERPRET_METHOD'
    from InterpretedMethod.java:182:in `call'
    from CachingCallSite.java:326:in `cacheAndCall'
    from CachingCallSite.java:170:in `call'
    from CallOneArgNode.java:57:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from BlockNode.java:71:in `interpret'
    from RootNode.java:129:in `interpret'
    from ASTInterpreter.java:121:in `INTERPRET_ROOT'
    from Ruby.java:834:in `runInterpreter'
    from Ruby.java:2674:in `loadFile'
    from ExternalScript.java:66:in `load'
    from LoadService.java:359:in `load'
    from RubyKernel.java:1081:in `loadCommon'
    from RubyKernel.java:1073:in `load19'
    from RubyKernel$INVOKER$s$0$1$load19_DBG.gen:-1:in `call'
    from DynamicMethod.java:209:in `call'
    from DynamicMethod.java:205:in `call'
    from CachingCallSite.java:326:in `cacheAndCall'
    from CachingCallSite.java:170:in `call'
    from FCallOneArgNode.java:36:in `interpret'
    from NewlineNode.java:105:in `interpret'
    from BlockNode.java:71:in `interpret'
    from RootNode.java:129:in `interpret'
    from ASTInterpreter.java:121:in `INTERPRET_ROOT'
    from Ruby.java:834:in `runInterpreter'
    from Ruby.java:842:in `runInterpreter'
    from Ruby.java:673:in `runNormally'
    from Ruby.java:518:in `runFromMain'
    from Main.java:390:in `doRunFromMain'
    from Main.java:279:in `internalRun'
    from Main.java:221:in `run'
    from Main.java:201:in `main'

What's going on?

这是怎么回事?

I suppose I could keep googling and trying finding my way in the dark, but I've spent so much time doing it already, and surely someone has accomplished the trivial task of debugging jRuby in Eclipse before me? Help!

我想我可以继续谷歌搜索并试图在黑暗中找到自己的方式,但我已经花了很多时间做这件事,当然有人已经完成了在我之前在Eclipse中调试jRuby的微不足道的任务吗?帮帮我!

1 个解决方案

#1


2  

Download the Eclipse Dynamic Languages Toolkit - Ruby Development Tools. Import your ruby on rails project. Check that your Gemfile references:

下载Eclipse动态语言工具包 - Ruby开发工具。在rails项目中导入ruby。检查您的Gemfile是否引用:

gem 'ruby-debug'

Then go to windows -> preferences, and do two things:

然后转到windows - > preferences,并做两件事:

  • setting the eclipse ruby interpreter to: c:\jruby\bin\jruby.bat
  • 将eclipse ruby​​解释器设置为:c:\ jruby \ bin \ jruby.bat

如何使用eclipse调试jRuby?

  • setting the eclipse ruby debug engine so it's not the "fast debugger" but "ruby built-in debugger"
  • 设置eclipse ruby​​调试引擎所以它不是“快速调试器”而是“ruby内置调试器”

如何使用eclipse调试jRuby?

Then in the run configuration, main tab, under "ruby script" the launch script is bin/rails, and in the arguments tab server --debugger. The interpreter tab should point to JRuby.bat

然后在运行配置中,主选项卡,在“ruby脚本”下,启动脚本是bin / rails,并在参数选项卡服务器--debugger中。解释器选项卡应指向JRuby.bat

Go to run -> run and give it about 30 seconds to load the JVM, the ruby environment, and hook everything in. Then check your http://localhost:3000/

转到运行 - >运行并给它大约30秒加载JVM,ruby环境,并挂钩所有内容。然后检查你的http:// localhost:3000 /

To start debug execution then type debugger in the place you want to start the debugger.

要启动调试执行,请在要启动调试器的位置键入debugger。

It all starts off looking something like this:

一切都开始看起来像这样:

如何使用eclipse调试jRuby?

#1


2  

Download the Eclipse Dynamic Languages Toolkit - Ruby Development Tools. Import your ruby on rails project. Check that your Gemfile references:

下载Eclipse动态语言工具包 - Ruby开发工具。在rails项目中导入ruby。检查您的Gemfile是否引用:

gem 'ruby-debug'

Then go to windows -> preferences, and do two things:

然后转到windows - > preferences,并做两件事:

  • setting the eclipse ruby interpreter to: c:\jruby\bin\jruby.bat
  • 将eclipse ruby​​解释器设置为:c:\ jruby \ bin \ jruby.bat

如何使用eclipse调试jRuby?

  • setting the eclipse ruby debug engine so it's not the "fast debugger" but "ruby built-in debugger"
  • 设置eclipse ruby​​调试引擎所以它不是“快速调试器”而是“ruby内置调试器”

如何使用eclipse调试jRuby?

Then in the run configuration, main tab, under "ruby script" the launch script is bin/rails, and in the arguments tab server --debugger. The interpreter tab should point to JRuby.bat

然后在运行配置中,主选项卡,在“ruby脚本”下,启动脚本是bin / rails,并在参数选项卡服务器--debugger中。解释器选项卡应指向JRuby.bat

Go to run -> run and give it about 30 seconds to load the JVM, the ruby environment, and hook everything in. Then check your http://localhost:3000/

转到运行 - >运行并给它大约30秒加载JVM,ruby环境,并挂钩所有内容。然后检查你的http:// localhost:3000 /

To start debug execution then type debugger in the place you want to start the debugger.

要启动调试执行,请在要启动调试器的位置键入debugger。

It all starts off looking something like this:

一切都开始看起来像这样:

如何使用eclipse调试jRuby?