Frage

Kann ich eine IRB -Eingabeaufforderung von einem raufenden Ruby -Skript ausgeben?

Ich möchte ein Skript ausführen, aber dann geben Sie mir eine IRB -Eingabeaufforderung an einem Punkt im Programm mit dem aktuellen Status des Programms, aber nicht nur durch Ausführen von RDEBUG und einen Haltepunkt.

War es hilfreich?

Lösung

Sie können Ruby-Debug verwenden, um Zugang zu IRB zu erhalten

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

Wenn das Programm Debugger erreicht, erhalten Sie Zugriff auf IRB.

Andere Tipps

Neugierig sein (Eine IRB -Alternative) Ermöglicht Sie dies auch, tatsächlich wurde sie von Grund auf diesen Anwendungsfall entworfen :)

Es ist so einfach wie das Putschen binding.pry An dem Punkt möchten Sie mit der Sitzung beginnen:

require 'pry'
x = 10
binding.pry

Und innerhalb der Sitzung:

pry(main)> puts x
=> 10

Schauen Sie sich die Website an: http://pry.github.com

Pry lasst uns:

  • Gehen Sie zu jedem Zeitpunkt in Ihrem Code in eine Sitzung ein
  • Methodenquellcode anzeigen
  • Dokumentation der Methode anzeigen (nicht mit RI, damit Sie sie nicht vorgenerieren müssen)
  • In und aus verschiedenen Kontexten ein- und aussteigen
  • Satzstellung markieren
  • GIST -Integration
  • Ansicht und Wiederholungsgeschichte
  • Öffnen Sie Editoren, um Methoden mithilfe von Methoden zu bearbeiten edit obj.my_method Syntax

Eine Tonne tolle und originelle Funktionen

Anscheinend erfordert ein Stück Code, um in IRB zu fallen.

Hier ist der Link (scheint gut zu funktionieren).

http://jameskilton.com/2009/04/02/embedding-irb-into-your-ruby-anapplication


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

Diese Funktion ist bei Ruby 2.4 erhältlich. Sie können einfach verwenden binding.irb

Z.B

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

Wenn Sie den Code über den Code ausführen, erhalten Sie die IRB -Konsole, damit Sie die Werte lokaler Variablen und alles andere im Rahmen des Geltungsbereichs überprüfen können.

Quelle: http://blog.redpanthers.co/new--binding-irb-introducuby-2-4/

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

Fügen Sie diese Zeile einfach hinzu, wo Sie den Haltepunkt wünschen:

require 'ruby-debug';debugger

Aber ich schlage vor, Py anstelle von IRB zu verwenden, was super praktisch ist, und fügen Sie stattdessen die folgende Zeile ein:

require 'pry'; binding.pry

Ich bin ziemlich spät zum Spiel, aber wenn Sie bereits ein Skript innerhalb von IRB/Pry laden, ein einfaches raise Arbeitet Sie auch an die IRB/Pry -Eingabeaufforderung. Ich benutze das ziemlich oft, wenn ich ein Schriften in der Schienenkonsole schreibe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top