如何从正在运行的脚本中删除IRB提示符?

时间:2009-07-17 17:07:46

标签: ruby irb

我可以从正在运行的Ruby脚本中删除IRB提示符吗?

我想运行一个脚本,但是然后让它在程序中的某个点给出一个IRB提示符,其中包含程序的当前状态,但不仅仅是运行rdebug并设置断点。

6 个答案:

答案 0 :(得分:44)

Pry(一个IRB替代方案)也允许你这样做,实际上它是从头开始设计的,正是这个用例:)

就像将binding.pry放在您想要开始会话的位置一样简单:

require 'pry'
x = 10
binding.pry

在会议中:

pry(main)> puts x
=> 10

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

怜悯让你:

  • 在代码中的任意位置进入会话
  • 查看方法源代码
  • 查看方法文档(不使用RI,因此您无需预先生成它)
  • 弹出和弹出不同的背景
  • 语法高亮显示
  • gist integration
  • 查看和重播历史
  • 使用edit obj.my_method语法
  • 打开编辑器编辑方法

一种更好的原创功能

答案 1 :(得分:29)

您可以使用ruby-debug来访问irb

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

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

答案 2 :(得分:14)

显然它需要一大堆代码才能进入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

答案 3 :(得分:9)

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

E.g。

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

如果运行上面的代码,您将获得irb控制台,以便您可以检查局部变量的值以及范围内的任何其他内容。

来源:http://blog.redpanthers.co/new-binding-irb-introduced-ruby-2-4/

Ruby commit:https://github.com/ruby/ruby/commit/493e48897421d176a8faf0f0820323d79ecdf94a

答案 4 :(得分:0)

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

require 'ruby-debug';debugger

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

require 'pry'; binding.pry

答案 5 :(得分:0)

我已经很晚了,但是如果你已经从irb / pry中加载了一个脚本,一个简单的raise也会让你回到irb / pry提示符。在rails控制台中编写一个脚本时,我经常使用它。