我可以从运行Ruby脚本的IRB提示吗?

我想运行一个脚本,但随后给我一个IRB提示符,在程序的当前状态下,不仅是通过运行rdebug并具有断点。

有帮助吗?

解决方案

您可以使用Ruby-Debug进入IRB

require 'rubygems'
require 'ruby-debug'
x = 23
puts "welcome"
debugger
puts "end"

当程序达到调试器时,您将可以访问IRB。

其他提示

(一个IRB替代方案)还可以让您这样做,实际上,它是从头开始设计的。:)

就像放置一样容易 binding.pry 在您要开始会话的时候:

require 'pry'
x = 10
binding.pry

在会议内部:

pry(main)> puts x
=> 10

查看网站: http://pry.github.com

pry让我们:

  • 在您的代码中的任何时刻插入会话
  • 查看方法源代码
  • 查看方法文档(不使用RI,因此您不必预先生成它)
  • 突然进出不同的情况
  • 语法突出显示
  • 要点整合
  • 查看和重播历史
  • 打开编辑器以编辑方法使用 edit obj.my_method 句法

一吨更伟大的原始功能

显然,它需要大量的代码才能落入IRB。

这是链接(似乎运行良好)。

http://jameskilton.com/2009/04/02/embedding-irb-into-your-ruby-application


require 'irb'

module IRB
  def self.start_session(binding) # call this method to drop into irb
    unless @__initialized
      args = ARGV
      ARGV.replace(ARGV.dup)
      IRB.setup(nil)
      ARGV.replace(args)
      @__initialized = true
    end

    workspace = WorkSpace.new(binding)

    irb = Irb.new(workspace)

    @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
    @CONF[:MAIN_CONTEXT] = irb.context

    catch(:IRB_EXIT) do
      irb.eval_input
    end
  end
end

此功能可从Ruby 2.4获得。您可以使用 binding.irb

例如

require 'irb'
a = 10
binding.irb
puts a

如果您在代码上方运行,则将获得IRB控制台,以便您可以检查本地变量的值以及其他范围中的其他内容。

资源: http://blog.redpanthers.co/new-binding-irb-inodroded-ruby-2-4/

Ruby提交: https://github.com/ruby/ruby/commit/493E488897421D176A8FAF0F050820323D79ECDF94A

只需将此行添加到您想要断点的位置:

require 'ruby-debug';debugger

但是我建议使用非常方便的pry代替irb,而是插入以下行:

require 'pry'; binding.pry

我的游戏很晚,但是如果您已经从IRB/pry中加载了脚本,那么一个简单的 raise 还可以将您弹出回到IRB/PRY提示。当在Rails控制台内编写一个OFF脚本时,我经常使用此功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top