43

実行中の Ruby スクリプトから IRB プロンプトにドロップできますか?

スクリプトを実行したいのですが、rdebug を実行してブレークポイントを設定するだけではなく、プログラムのある時点でプログラムの現在の状態を示す IRB プロンプトを表示させます。

4

6 に答える 6

46

Pry(IRBの代替)でもこれを行うことができます。実際、このユースケースのためにゼロから設計されています:)

binding.pryセッションを開始したいポイントに置くのと同じくらい簡単です:

require 'pry'
x = 10
binding.pry

そしてセッション内:

pry(main)> puts x
=> 10

ウェブサイトをチェックしてください:http://pry.github.com

詮索しましょう:

  • コードの任意の時点でセッションにドロップします
  • メソッドのソースコードを表示する
  • メソッドのドキュメントを表示する(RIを使用していないため、事前に生成する必要はありません)
  • さまざまなコンテキストに出入りする
  • 構文の強調表示
  • 要旨の統合
  • 履歴の表示と再生
  • edit obj.my_methodエディターを開いて、構文を使用してメソッドを編集します

1トン以上の優れたオリジナルの機能

于 2011-08-18T05:30:07.303 に答える
29

ruby-debug を使用して irb にアクセスできます

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

プログラムがデバッガーに到達すると、irb にアクセスできるようになります。

于 2009-07-17T17:23:37.293 に答える
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
于 2010-01-27T04:57:28.023 に答える
10

この機能は 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

于 2016-12-11T01:42:09.167 に答える