如何从正在运行的脚本转到 IRB 提示符?

发布于 2024-07-26 20:29:34 字数 115 浏览 2 评论 0原文

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

我想运行一个脚本,但然后让它在程序中的某个点上给我一个 IRB 提示以及程序的当前状态,但不仅仅是通过运行 rdebug 并设置断点。

Can I drop to an IRB prompt from a running Ruby script?

I want to run a script, but then have it give me an IRB prompt at a point in the program with the current state of the program, but not just by running rdebug and having a breakpoint.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

红尘作伴 2024-08-02 20:29:34

Pry(IRB 替代方案)也可以让您执行此操作,事实上它是专门为这种用途而设计的case :)

只需将 binding.pry 放在要启动会话的位置即可:

require 'pry'
x = 10
binding.pry

在会话内部:

pry(main)> puts x
=> 10

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

撬动您:

  • 在代码中的任何位置放入会话
  • 查看方法源代码
  • 查看方法文档(不使用 RI,因此您不必必须预先生成它)
  • 在不同的上下文中弹出和弹出
  • 语法突出显示
  • 要点集成
  • 视图和重播历史记录
  • 打开编辑器以使用edit obj.my_method语法编辑方法

一吨更多伟大和原始的功能

Pry (an IRB alternative) also lets you do this, in fact it was designed from the ground up for exactly this use case :)

It's as easy as putting binding.pry at the point you want to start the session:

require 'pry'
x = 10
binding.pry

And inside the session:

pry(main)> puts x
=> 10

Check out the website: http://pry.github.com

Pry let's you:

  • drop into a session at any point in your code
  • view method source code
  • view method documentation (not using RI so you dont have to pre-generate it)
  • pop in and out of different contexts
  • syntax highlighting
  • gist integration
  • view and replay history
  • open editors to edit methods using edit obj.my_method syntax

A tonne more great and original features

浮生未歇 2024-08-02 20:29:34

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

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

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

you can use ruby-debug to get access to irb

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

when program reaches debugger you will get access to irb.

审判长 2024-08-02 20:29:34

显然它需要一大块代码才能放入 irb 中。

这是链接(似乎效果很好)。

http://jameskilton.com/2009/04/ 02/将 irb 嵌入到您的 ruby​​ 应用程序中


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

apparently it requires a chunk of code to drop into irb.

Here's the link (seems to work well).

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
蓝咒 2024-08-02 20:29:34

该功能从 Ruby 2.4 开始提供。 您可以只使用 binding.irb

例如,

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

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

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

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

This feature is available from Ruby 2.4. You can just use binding.irb

E.g.

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

If you run above code, you will get irb console, so that you can inspect values of local variables and anything else that is in scope.

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

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

千里故人稀 2024-08-02 20:29:34

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

require 'ruby-debug';debugger

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

require '撬'; 绑定.pry

Just add this line to where you want the breakpoint:

require 'ruby-debug';debugger

but i suggest use pry instead of irb, which is super handy, insert the following line instead:

require 'pry'; binding.pry

逆夏时光 2024-08-02 20:29:34

我已经很晚了,但是如果您已经从 irb/pry 中加载脚本,一个简单的 raise 也可以让您返回 irb/pry 提示符。 在 Rails 控制台中编写一次性脚本时,我经常使用这一点。

I'm quite late to the game but if you're loading a script from within irb/pry already, a simple raise also works to pop you back out to the irb/pry prompt. I use this quite often when writing one off scripts within the rails console.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文