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

我可以从正在运行的Ruby脚本下降到IRB提示符吗?

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

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

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

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

撬 (IRB的替代)也可以让你做到这一点,实际上它是从根本上devise的这个用例:)

binding.pry放在你想开始会话的地方,

 require 'pry' x = 10 binding.pry 

在会议中:

 pry(main)> puts x => 10 

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

撬让你的:

  • 在您的代码中的任何时刻放入会话
  • 查看方法的源代码
  • 查看方法文档(不使用RI,所以你不必预先生成它)
  • popup和popup不同的上下文
  • 语法高亮
  • 主旨融合
  • 查看和重放历史logging
  • 打开编辑器使用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控制台,这样你就可以检查局部variables的值和其他任何在范围内的值。

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

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

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

require 'ruby-debug';debugger

但我build议使用pry而不是irb,这是超方便的,插入下面的行代替:

require 'pry'; binding.pry