你如何调试Rails应用程序?

时间:2009-06-08 02:58:15

标签: java ruby-on-rails ruby eclipse netbeans

是否可以以类似于Java应用程序的方式调试Rails应用程序 - 设置断点并插入代码?

最好的工具是什么?

我有一个混合的Java / Ruby on Rails应用程序,我可以在Eclipse或Netbeans中运行。

我想在这个应用程序中插入一些代码并尝试找出问题的原因。

在Eclipse中如果我在blog_controller中设置断点然后选择“Debug”按钮,它似乎使用 ruby​​-debug-ide gem来执行代码但是我得到这个无益的输出,没有选择进入任何来源:

Fast Debugger (ruby-debug-ide 0.4.5) listens on localhost:56726
    ./war/WEB-INF/app/controllers/blog_controller.rb:1
    C:/Ruby18/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.5/lib/ruby-debug.rb:101:in `debug_load'
    C:/Ruby18/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.5/lib/ruby-debug.rb:101:in `debug_program'
    C:/Ruby18/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.5/bin/rdebug-ide:82
    C:/Ruby18/bin/rdebug-ide:19:in `load'
    C:/Ruby18/bin/rdebug-ide:19
Uncaught exception: uninitialized constant ApplicationController

我不确定我做错了什么,或者这是否是我所能想到的。

10 个答案:

答案 0 :(得分:8)

我最常用的调试器是ruby-debug gem,它是一个gdb-esque命令行调试器。一旦您学习了一些命令,它就会非常快速有效,并为您提供一些方便的功能,例如能够在您的程序环境中启动irb并进行即时更改。

当您需要在远程服务器上调试时,基于命令行会派上用场。

答案 1 :(得分:6)

您可以期待更多。我已经使用Aptana的RadRails版本的Eclipse来调试Rails应用程序 - 如您所述 - 设置断点并逐步执行代码。

您可能做错了。看起来好像是在尝试调试单个控制器文件,而不是调试Rails应用程序。当我尝试从命令行执行控制器文件时,我收到类似的消息:

C:\workspace\myapp\app\controllers>ruby users_controller.rb
users_controller.rb:1: uninitialized constant ApplicationController (NameError)

在Aptana RadRails中,我选择Run > Debug As > Ruby Application来调试应用程序。

答案 2 :(得分:3)

对于vim用户,我强烈建议您查看vim-ruby-debugger,这与Tim Pope的rails.vim脚本非常吻合。

它为您提供了一个方便的:Rdebugger命令,允许您设置断点并打开一个拆分窗口来显示变量值。

答案 3 :(得分:3)

可能不相关,但我想在某处发布:得到错误:“调试器的未定义方法`run_init_script':模块”在rails 2.3.2中运行调试器。 sudo gem是否安装了ruby-debug,问题就消失了。

答案 4 :(得分:2)

Netbeans有一个指南here

答案 5 :(得分:1)

实际上,我和Aptana有同样的问题。 Run > Debug As > Ruby Application只是不起作用。我终于通过转到Servers选项卡使调试器工作,然后在debug mode中启动服务器。之后,设置一些断点并触发相应的操作。希望这会有所帮助。

答案 6 :(得分:1)

调试?那只是知道在大多数情况下在Ruby(以及扩展,Rails)的情况下要查看的位置。

在这种情况下的问题是,您可能仍然将ApplicationController称为 application.rb ,其中应将其重命名为 application_controller.rb

答案 7 :(得分:0)

如果您知道如何读取错误堆栈跟踪,则rails中的调试很简单!但是如果你需要在运行时明确地注意值,那么你可以使用rails breakpointer.Below是指向breakpointer的方法的链接..希望这有助于!!!

http://destiney.com/blog/rails-breakpointer

答案 8 :(得分:0)

我不能代表Eclipse(从来没有对我很好)或Aptana(未尝试过),但根据经验,我可以说NetBeansRubyMine都可以做你想要的。在这两种情况下,你应该确保ruby-debug-base和ruby-debug-ide gems是最新的:特别是RubyMine在我完成之前不适合我。

答案 9 :(得分:0)

我建议只使用RoR设置断点(实际上只是 put 到控制台)99%的调试 - 这种方法很简单,可以在任何IDE中使用,所以你永远不需要学习新调试器的工作原理。