実行中のRubyスクリプトからIRBプロンプトにドロップすることはできますか?実行中のスクリプトからIRBプロンプトに移動するにはどうすればよいですか?
私はスクリプトを実行したいのですが、プログラムの現在の状態でIRBプロンプトを表示させますが、rdebugを実行してブレークポイントを設定するだけではありません。
実行中のRubyスクリプトからIRBプロンプトにドロップすることはできますか?実行中のスクリプトからIRBプロンプトに移動するにはどうすればよいですか?
私はスクリプトを実行したいのですが、プログラムの現在の状態でIRBプロンプトを表示させますが、rdebugを実行してブレークポイントを設定するだけではありません。
あなたは、プログラムがデバッガに達したときにIRBへのアクセスを取得します
require 'rubygems'
require 'ruby-debug'
x = 23
puts "welcome"
debugger
puts "end"
をIRBへのアクセスを取得するにはルビー・デバッグを使用することができます。
明らかに、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
優れた検索、ありがとう!これはまさに私がIRB.start_session(バインディング)を呼び出した場所のコンテキストでクラスとインスタンス変数にアクセスするのに必要なものです。 – csmosx
Pry(IRB代替)も、実際にはそれがまさにこのユースケースのためにゼロから設計されました:)
それはbinding.pry
を置くのと同じくらい簡単です、あなたがこれを行うことができますセッションを開始する時点で:
require 'pry'
x = 10
binding.pry
セッション内:
pry(main)> puts x
=> 10
ウェブサイトをチェックアウト:あなたのコード内の任意の時点でセッションに
詮索はのあなたを聞かせて(RIを使用していないので、あらかじめ生成する必要はありません)
edit obj.my_method
構文トン以上の素晴らしいとオリジナルの特徴は
はちょうどこの行を追加します。ブレークポイントが必要な場所:
require 'ruby-debug';debugger
しかし、私が代わりに超便利ですIRBの使用のプライを示唆しては、代わりに次の行を挿入します。
require 'pry'; binding.pry
この機能は、Rubyの2.4から入手可能です。ちょうど使用することができますbinding.irb
たとえば、
上記のコードを実行すると、irbコンソールが表示され、ローカル変数の値やスコープ内にあるその他の値を検査できます。
出典:http://blog.redpanthers.co/new-binding-irb-introduced-ruby-2-4/
Rubyがコミット:https://github.com/ruby/ruby/commit/493e48897421d176a8faf0f0820323d79ecdf94a
を私はかなり遅くゲームへの思いが、あなたはすでにIRB/PRY内からスクリプトを読み込む場合、簡単なraise
もあなたをポップに努めていますirb/pryプロンプトに戻ります。私はレールコンソール内のスクリプトからスクリプトを書くときにこれを非常によく使う。
これはバインディングコンテキストを考慮に入れますか?バインディングを別のものに設定することはできますか? –
Duh。私はアホです。ありがとう! –
Ruby 1.9では動作しない 'ruby-debug'宝石が必要です。 – Zr40