実行中のスクリプトからIRBプロンプトにドロップするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1144560

  •  16-09-2019
  •  | 
  •  

質問

実行中の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-introduced-ruby-2-4/

ルビーコミット: https://github.com/ruby/ruby/commit/493e48897421d176a8faf0f0820323d79ecdf94a

ブレークポイントが必要な場所にこの行を追加するだけです。

require 'ruby-debug';debugger

ただし、非常に便利なIRBの代わりにPryを使用することをお勧めします。代わりに次の行を挿入します。

require 'pry'; binding.pry

私はゲームにかなり遅れていますが、すでにIRB/PRY内からスクリプトをロードしている場合は、簡単です raise また、IRB/PRYプロンプトに戻ってくるようになります。 Railsコンソール内に1つのスクリプトを書き込むとき、私はこれを非常に頻繁に使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top