【问题标题】:How to attach the Rubymine IDE debugger to a shell process?如何将 Rubymine IDE 调试器附加到 shell 进程?
【发布时间】:2012-02-11 18:52:54
【问题描述】:

我想使用 Rubymine 的 IDE 调试器来调试在命令 shell 中运行的 ruby​​ 进程,因为它是生成的,例如通过“rails 控制台”。

在运行 Web 服务器(从 Rubymine 中)或测试套件(也从 Rubymine 中运行)时,我从调试器中获得了巨大的成功。

但是,如果进程不是由 Rubymine 启动的,我不知道如何附加调试器。

我在带有 Sun Java 1.6.0_26、Ruby REE 1.8.7 和最新调试 gem 的 Ubuntu 上使用 Rubymine 3.2.4 版本:

ruby-debug-base (0.10.4)
ruby-debug-ide (0.4.17.beta8)

想法?

【问题讨论】:

  • 我认为你的问题的标题缺少一个动词。
  • @DavidGrayson 谢谢——你是对的。固定。

标签: ruby debugging irb rubymine rails-console


【解决方案1】:

在 RubyMine 中使用 Ruby Remote Debug 配置类型。详情请参考官方RubyMine documentation

基本上你像这样运行脚本:

rdebug-ide --port <port number> -- script.rb

然后从 RubyMine 调试器连接到指定的端口。

【讨论】:

  • 感谢@CrazyCoder,在我稍微整理了一下我的困惑之后:1. 从命令行启动 rdebug-ide 命令,例如要调试rails console shell 会话,它将读取:rdebug-ide --port 1234 -- rails console。 2. 在 RubyMine 中,使用运行配置编辑器并使用相同的端口(此处为 1234)进行新的 Ruby Remote Debug 配置,并将远程路径设置为工作目录,然后点击调试按钮,它会导致 shell进行初始化,而源代码可以在 RubyMine 中设置断点。非常感谢!
【解决方案2】:

这就是你在 Rails 中的做法:

首先,确保您已安装 rdebug-ide

gem install ruby-debug-ide --platform=ruby

接下来,在控制台中运行:

rdebug-ide --port 6778 -- /projects/your_rails_project/script/rails console

或用于 rails 4.0+

rdebug-ide --port 6778 -- /projects/your_rails_project/bin/rails console

或者,正如@ChristopherWill 提到的below,如果您希望调试非本地服务器,可以传递--host 参数。 (阅读下面他的评论以了解警告)

这将等待远程调试客户端连接。

  1. 点击 Run > Edit Configurations in RubyMine 然后添加一个“Ruby Remote Debug”实例

  2. 使用与上述6778相同的端口(如果您更改上述端口,请确保端口匹配)

  3. 根文件夹和本地根文件夹相同,/projects/your_rails_project

  4. 单击应用并关闭。

接下来,从运行和调试按钮旁边的列表中选择此配置,然后单击调试按钮。给它几秒钟,控制台将在你运行“rdebug-ide”的地方运行“rails console”

【讨论】:

  • 谢谢,但这实际上在 Rails 3.2 中不再有效,因为rails console 现在产生了一个单独的进程,RubyMine IDE 调试器还不能处理多进程调试,尽管他们应该包括这个在 RubyMine 的下一个版本中。
  • 我目前正在使用 RubyMine 4.0.3 调试 rails 3.2.2 应用程序(ruby 1.9.3p194)。当我尝试运行“boot.rb”(使用 rdebug-ide)时,该进程立即启动和停止。不过,当我使用上面的命令时,它对我有用。
  • 你可以让进程运行没有问题,但我认为你不能让它在断点处停止,因为rails 可执行文件会产生一个不受监控的后台进程。我首先在调试器中运行它的全部原因是设置断点。 youtrack.jetbrains.com/issue/RUBY-10967
  • 我的在断点处停止,一切都按预期工作。可能是因为我的 development.rb 中有这段代码吗? silent_warnings 确实开始需要'pry' Rails::Console::IRB = Pry rescue LoadError rescue end end
  • 啊,也许 Pry 的行为不同。我没试过。但很高兴知道。
【解决方案3】:

我真的很想在这里发布一些很难找到完整答案的东西,我花了很长时间才弄清楚。有人问如何将远程调试附加到 resque worker,这是最终对我有用的正确方法。这篇文章在谷歌搜索上很高,很容易找到。

服务器上的 FROM SHELL(对我来说是我的笔记本电脑)从您的站点根目录执行此操作: rdebug-ide --port 1236 --dispatcher-port 26166 --host 0.0.0.0 bin/rake resque:work QUEUE=*

在 RubyMine IDE 中配置远程调试: 远程主机:127.0.0.1 远程端口:1236 远程根文件夹:服务器上到站点根目录的路径 本地端口:26166 本地根路径:工作站上指向根文件的路径,您将在其中设置断点(在我的情况下,它全部是本地的,因此它全部是 1 个路径和文件的 1 个副本)

使用以下命令正常运行您的网络服务器:rails s

在您的 Resque 工作程序中设置一个断点,并尝试在您的站点中执行您需要执行的任何操作以使您到达该断点。

1 注意 - 拥有“弹簧”宝石给了我错误,我不得不将其注释掉/捆绑。

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 2019-01-31
    • 2019-08-12
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多